在我23岁的时候,发生了一件令我匪夷所思的事————我的直流电机调不了速了。在遇到这件事情的前七年里,我是个坚定的可知论者。
当时我让它输出占空比为13%的方波了,我程序明明白白的这样写着
TIM_SetAutoreload(TIM8,10000);//控制PWM波的输出频率
TIM_SetCompare1(TIM8,1000);//定时器8通道1,PWM占空比10%
可是它的速度却不能被调整。
另外,我的定时器也被初始化了,这点第二路直流电机可以证明——它的调速功能还是正常的。
然后我开始很焦虑,因为在我印象里,这个电机在前几天的时候还是可调的。于是我把之前的代码翻找出来,烧录进去,诶,这个电机又变得可以调速了。
这不符合逻辑,我明明没有修改任何和速度相关的代码。这是我当时遇到这个问题时的第一个念头。
我为什么会这样想呢?根据理性主义来说,在我的代码未被写出来之前,就已经有一片写好的代码在我的心中了。就像在桌子没被造好的时候,人们都知道它应该有四个脚一样。
我知道,在设置它的占空比之后,它应该发出给定频率给定占空比的方波。
但是当时身边没有示波器,我无法通过直接观察得到输出的PWM波到底变成了怎么样。
于是,我通过控制变量的方法,一点点把我的代码,改回之前的模样。
每修改一句,我就去执行一次电机运动的代码。看看它是否恢复了调速。这样子做,就可以找出来究竟是哪句话的影响,使得电机失去了调速的功能。
终于,在漫长的逐字逐句修改后,我发现了是这么一句话,让电机恢复了调速功能
gate_open()
这个函数里面是控制门的电机的IO口的操作,里面一句和调速相关的话也没有啊。
我想不明白为什么会这样。
并且我发现我的电机开始不符合逻辑了。
在这之后我的代码里面修改一些话,会有可能让电机失去调速功能。可能我把两个变量换个位置,然后我的电机就调不了速了。净是这种奇怪的问题,这段代码便成了“祖传代码”,连里面的顺序我都不敢修改,因为我的电机不符合逻辑。
这样子过了一个星期,我从外地回来。
终于我身边有示波器啦!!
作为一个新时代的青年,我立马建立起了一套控制变量法去测试这个问题。
然后,我发现 ,我的单片机管脚输出了我想要的PWM波…但是这时候我的身边却没有电机的驱动板。
我无法测试这个PWM波能否使电机调速。
也许我拥有这一个“既是好的又是坏的”的电机,之前的代码可以调速,是不是证明电机没有出问题?而我的单片机又可以输出我想要的PWM波,这是不是证明我的单片机也没有问题?
而它们两个凑在一块儿就有问题了。
可能这个和我观察电机的方式有关系,使得这个电机存在在“既是好的又是坏的状态”