
接上篇:实验二、平台搭建和其它硬... 本实验遇到常规的模块,实际用到的模块: 1个128x64黑白LCD显示屏、1路程序计数器、3路ADC[其中1路Touch检测]、2路PWM[1路电机,1路舵机]、1路脉冲发生器、5路中断输入检测[其中1路超声监测,3路计数,1路按钮开关]、Ticker、Timer两个系统时钟源。 开发板设定了4路ADC[PC_0~PC_3],PC_1连接了按钮,PC_2连接了Touch[PCB上的一个单面焊盘],因此ADC0-PC_0,ADC1-PC_3。此实验中4路引出的ADC都用上了,需要增加ADC只能从两边的引脚插针取用了。 查手册PWM选用了Timer1控制的PA_10,PA_11。 脉冲发生和中断输入取用连接LCD对面的插针排,没有特定选择对象。实际选用了脉冲发生PB_8[由Ticker中断产生10uS宽度的应该是近2KHz的脉冲,如果是方波则是1KHz]。 外接信号的5路中断检测由PB_4,PB_5,PB_6,PB_7,PC_2。其中PB_4~PB_6输入脉冲计数用,PB_7作为检测超声脉冲测距用[有Timer检测发收脉冲间隔用],代码已敲定,但没有传感器没有做这个实验,以后补;PC_2用于检测Touch触摸实验。 具体照片解释: 照片31是整体硬件连接;照片32是正常按压Reset见之后的屏幕显示;照片33,34是PWM检测,33是的PWM1>PWM0时,红色LED渐亮,34是PWM1<PWM0时,绿色LED渐亮;照片35,36是从示波器监测PB_8脉冲输出,35显示频率略低于2KHz,因为每个脉冲宽度占去5uS之故,36显示脉宽为15uS--与实际设置不符,实际设置延时5uS,可能包括执行时间后延时实际近15uS;照片37,38是监测Touch电压变化,37是手指在Touch焊盘上时电压变化很大,几乎是0~1,38是没有触摸时,电压在大于0.5~小于<0.7之间,较为稳定;照片39是Reset键之后的串口初始数据。 缺少的照片是按键照片,这个较为简单,就不验证了。 代码很简单,就不给出了,仅对板子设计核试验的结果做一件单讨论: 1. 可以说在小车控制上所需要的信号完全可以满足要求,有点冗余。 2. 板子在此状态下连续跑了超过16小时没有问题,当然没有连接外设,只属于静态测试。 3. 128x64屏幕足够显示所需数据。 问题: 1. 按键是直接连接在PC_1上的,因为尝试设计为ADC输入,因此没有接防抖动的RC,此案件的响应时间有点长,从串口检测和屏幕显示可以看到那个0->1或1->0变换时间超过1秒或更多,就像老太婆走路一样很慢! 2. Touch也是直接接在原来设计为ADC的PC_2上,结果没有触摸时,监测到的电压基本上是中点稍多点,接触后是人体感应的交变电压,其复制在0~1之间[浮点数],因此判断Touch按下需要做些数据处理,带来麻烦。 根据以上测试的得到结果,可以这样认定: 1. 用户按键必须重新设计,单独走一个独立的IO,不与ADC口共用! 2. 用户Touch按键也必须独立IO设计,并且加上必要的RC提高响应速度和减少感应电压的波形影响。 今天有点时间,将舵机控制的PWM调了出来。模拟舵机是按照PWM高电平的脉宽进行角度控制的,规定1.5mS脉宽为舵机中间的位置,0.5mS是最左边的位置,2.5mS是最右面的位置,写一点代码,控制脉宽0.5mS->2.5mS,再2.5mS->0.5mS,来回变化形成舵机摆动。照片3A为示波器脉宽接近0.5mS的照片,3B是接近2.5mS时的照片。舵机控制视频。 增加的内容按照https://www.stmcu.org.cn/module/forum/thread-612788-1-1.html文档的操作一样是在最后。没辙了。 顺便说一下,STM32F1xx系列的ARM与Freescale的芯片一样在控制PWM上有较好的表现,可以以uS的进度较为精确的控制舵机。这一点非常好!这与他的Timer是24位的有极大的关系。 |
31
32
33
34
35
36
37
38
39
3A
3B
如何正确插入图片,看这里
https://www.stmcu.org.cn/module/forum/thread-612788-1-1.html
那个实际是SPI和串口液晶共用口,可以换成排座,但当主辅串口用就麻烦点,所以焊了排针。
可以可以,很棒。