数组a[6][10]有6行,每一行有10位数据,数组a[0][j]中0代表发送第一行数据,j从0循环到10,即数组连续发送了10个数据,这10个数据为一个指令,屏收到指令后会显示对应的图片。延时20ms是为了避免发送的两个数据之间间隔太短而产生错乱,延时100ms是为了避免图片与图片之间切换得太快而发生混叠。
包括还有pwm输出使电机和舵机转动,在这里就不一一赘述。更多内容已写入报告中,欢迎码友下载交流学习。
电机舵机模块调试(1)调试过程中遇到的问题:明明主程序中没有直接左偏的代码,但每次小车一上电舵机就会自动左偏,这是什么原因又该怎么解决呢?小车左右转可以来回控制,但偏转之后无法回正,所以在最基本的前进、后退、左转和右转四种状态下,我们需要做什么才能让它回正呢?给定电机一个压差使它可以前进后退,那么压差改变它是否可以加减速呢?
(2)原因分析与探究:对于问题一,一开始我想过上电后舵机自动左偏会不会跟初始值psc和arr有关,但仔细理解一下舵机的原理就可知,arr是PWM的机械周期,psc是预分频系数,在没有指令的情况下是不会出现自动左偏的情况的,所以只可能是小车自身特性的原因。这一点也在调试左右转时得到了验证,本来想让舵机左偏45°,那输入信号的脉冲应该设置为1ms才对,但是经过多次调试后发现小车最接近45°的时候脉冲大概为1.4ms,所以由于小车自身的特性一上电就会左偏。
对于问题二,要使小车回正,我们只需利用PWM调节舵机角度,使其偏转角恰好为0°就可以了。对于问题三,PWM占空比的大小决定了电机两端电压差的大小,而压差的大小决定了电机转动的速度,所以只要调整好PWM的占空比就可以得到不同速度的挡位。
(3)问题的解决:对于问题一,虽然小车自身的特性我们无法改变,但我们可以利用回正函数使小车不左偏。因此,在主函数while循环的开始就添加一个回正函数,使小车保持0°的状态。对于问题二,我们依然使用函数TIM_SetCompare4(TIM1,x)来调节,经过反复测试,当x=850时小车处于回正状态。对于问题三,前进时,PB6和PB8的PWM脉冲值为99,PB7和PB9的PWM脉冲值为899,加速时,保持PB7和PB9的PWM脉冲值不变,将PB6和PB8的PWM脉冲值改为0,从而压差变大,速度加快。同理,减速时,将PB6和PB8的PWM脉冲值为199,从而压差变小,速度减慢。
3.2迪文屏模块调试(1)调试过程中遇到的问题:第一天做屏的时候一直烧录不上,步骤看似没什么问题,但总是出现雪花屏,后续步骤都无法进行。第二天图片可以成功下载后又开始思索小车要向屏发送什么指令才能使屏显示出对应的状态呢?一连串的指令又要通过什么发送呢?
(2)原因分析与探究:屏的烧录过程看似简单,但有一些细节地方不注意就会出错,经过不断查阅资料和询问我发现主要是这三个问题:首先是图片的格式必须为bmp的形式;其次是图片的分辨率要改成320*480;最后是图片的帧率,有的图片较为复杂帧率太高需要调低。要使迪文屏能够自动切换成对应状态的图片需要发送带有切换功能的指令,为了测试指令是否正确,我首先用串口调试助手向屏发送了指令看屏是否可以自动切换。
问题的解决:将图片格式、分辨率和帧率修改正确后,屏得以成功烧录。STM32向屏发送指令“5AA5078200845A010000”,其中5AA5是帧头;07表示后面有7位数据(每两个数字为1位);82是写数据指令;0084是变量地址(多个变量一起读写时,只需定义起始变量地址);5A表示启动一次页面处理的指令;01表示页面切换;0000表示写入的数据值,即图片的编号。要想在程序代码中连续发送这串指令,我们以for循环+数组的形式连续发送。不过每发一组数据就要进行一次短延时,避免发送的两个数据之间间隔太短而产生错乱,每发一整串指令就要进行一次较长延时,避免图片与图片之间切换得太快而发生混叠。
3.3蓝牙模块调试(1)调试过程中遇到的问题:正常情况下,手机端与蓝牙模块进行配对,然后在蓝牙调试助手输入数据,电脑上的串口就可以直接接收到了。但在实际测试的过程中,手机端可以成功与蓝牙模块连接,但无法进行正常的数据收发。
(2)原因分析与探究:我首先怀疑出现上述原因是因为蓝牙模块没有工作在从设备模式,从而无法正常收发数据。通过操作蓝牙模块进入AT指令模式,并输入模块查询指令(AT+MODE),蓝牙模块返回指令“Slave”,表明该蓝牙模块确实工作在从设备模式,所以故障不是由于模式设置的原因导致的;其次我怀疑蓝牙模块存在故障导致了无法正常收发数据,经过更换芯片故障仍然存在,因而排除这一原因;最后我们怀疑是因蓝牙协议兼容性的问题导致了上述原因,并通过更换手机以及尝试不同的APP,上述问题得到了解决。
(3)问题解决:通过反复的试验我们确定问题出现在了蓝牙调试助手上,通过尝试不同的蓝牙调试助手,我们找到并选取了连接速度最快、实验效果最好的软件继续完成课程设计。
3.4语音模块调试(1)调试过程中遇到的问题:语音无法完整播出,一直循环的一个字。
(2)原因分析与探究:语音模块是通过延时函数设置的模拟时序,与小车的电机运行时的中断冲突。
(3)问题解决:在语音播报函数后加一个延时,使语音顺利播完后再运行电机代码。