- 打卡等级:初来乍到
- 打卡总天数:2
- 最近打卡:2024-08-06 20:01:46
新手上路
- 积分
- 36
|
一般大家都会在电调程序里写上电后放音乐的程序来检测电机和电调是否完好。
我们的程序也不例外,甚至浪漫主义地调了一首卡农。
但是卡农太久了,于是在制作新的电调时,我就裁掉了一部分音节:
#define MUSIC_NUM 8
uint16 frequency_spectrum[6] = {0, 523, 587, 659, 698, 783};
uint8 music_frequency[MUSIC_NUM] = {1,2,3,4,5};
uint16 music_wait_time = 250;
变成了上边这样。
新的电调焊好了,我下载程序,美美上电。
然后我就发现在电调响完五声之后,会莫名转动一下
https://www.stcaimcu.com/forum.php?mod=attachment&aid=NTMxMzl8NDI1ZTA0YmN8MTc0NjE0NzQwMnwwfA%3D%3D
(这是事后的场景复原)
为什么呢?
最开始我们怀疑是换相检测部分有问题
但是再三检查,重焊也还是会疯转,
又想会不会是芯片没焊好,重焊了几次也没效果。
那会不会是程序的问题呢?
于是我又看向了这我唯一修改过的部分
会不会是这里有问题?
但是按照程序逻辑,这里即使写20,也是只是会在
uint8 music_frequency[MUSIC_NUM] = {1,2,3,4,5};
后边多加几个 0 ,多播放一会儿空音节啊。
但我还是抱着将信将疑的态度,把 8 改成了 5 ;
上电,问题解决了。
https://www.stcaimcu.com/forum.php?mod=attachment&aid=NTMxNDB8MDk5OTAzNmR8MTc0NjE0NzQwMnwwfA%3D%3D
为什么数组多个 0 会让电机疯转?
for(i = 0; i < MUSIC_NUM; i++)
{
pwm_init(PWMA_CH1P_P20, frequency_spectrum[music_frequency], beep_duty);
delay_ms(music_wait_time);
}
这响声程序看起来根本不具有这样的效果啊?
顺着0往下找,我注意到了
uint16 frequency_spectrum[6] = {0, 523, 587, 659, 698, 783};
频率数组这里,frequency_spectrum[0] = 0
众所周知,C语言里 0,很引人注目,也相对更容易出问题
所以我就尝试着,把 0 改成了 50
果然,不会疯转了,再疯转的地方取而代之的是音效。
看来问题就是 0 了
检测发现
在程序里写PWM频率为 0 时,会直接给电机输出 3.3V 电。
可能是STC芯片的问题
问了实验室的前辈,他们也表示遇到过这个情况
而且还说 “但是我们只有在张学长的电脑上运行才会出现这种情况”
真是玄学呢。
|
|