Graphical User Interface(GUI)
(OLED)使用图形用户界面
简易菜单
菜单和各种显示都放到main.c里面,要显示的数据经过字符转化之后放到buff里面再 调用显示 。
同一个页面的显示用个函数包装起来。
直接用几个变量,通过它们的值来跳转不同的界面(达到这个效果后尝试在里面设置参数)
或者用结构体,来定义不同的页面
Openmv与F103串口通信
任务:将openmv通过串口发送过来的数据用OLED显示出来(完成)
注意串口的抢断优先级,之前一直因为0级的sysTick中断,把接受openmv串口数据的3级抢断优先级的串口接受中断给打断了!!! 编程一定要注意优先级,不能被打断的过程放到高级的抢断优先级中去!!!!
因为我是通过捕获sysTick的节拍来进行任务调度的,所以不能被打断的过程(例如接受openmv传过来的数据包,就得同样放在0级的抢断优先级中!!!)
Openmv UART3 的TX 是P4 ,RX是P5
F1CoreBoard 的USART2 的TX 是PA2 ,RX 是PA3
UART4 的TX 是 PC10 RX 是PC11
串口通信有些许问题,没学好 ,暂时不管,调试对比数据正确就行
选0x5B ,它是十进制的91呀,万一数据就是91,被当成结束标志了咋办?
可能性很小
2 的8次方 = 256 ,把帧尾变成0xFF或.0xFE之类的不是更好吗?
Openmv捕捉色块的二维坐标: X最多155,y最多114 ,也没搞懂为啥
电赛代码移植方法(相应知识之后补回去)
如果想用正点或者野火的源代码,记得打开相应例程并编译,然后通过复制相应.c .h文件放在待移植的工程中。看编译报错,然后在stm32f1xx_hal_conf.h中取消相应注释,并在Drivers/STM32F1xx_HAL_Driver中加入缺失的HAL驱动文件。
MPU6050解算欧拉角
用 ADC 每位表征的物理量值来表示分辨率,如每位代表 20 厘米,则它的分辨率为 1LSB/20cm,它等效于 5 位表示 1 米: 5LSB/m
LSB(Least Significant Bit)
改用野火的得把cubeMX的 IIC2初始化取消掉,并把HAL库驱动重新添加,还有把conf里面的注释重新取消,Usart也用他的代码重新定义一下。
野火可以用地面站的源码是标准库的,选择放弃,重新移植正点原子的MPU6050代码
直接使用MPU6050的DMP获得欧拉角
正点的能移植,但是自检会失败,总是返回错误8,所以选择直接注释掉它的自检函数(应该是我之前电源引脚插反了,所以之前的坏了)
换了一个MPU6050之后可以自检成功
测试一下最高读取速率:调用这个函数的时间可以在0.5ms至300ms,太快的话可能DMP还没处理完数据。 即最高读取频率可达2KHz,,实际用的时候2ms调用一次吧
mpu_dmp_get_data(&pitch,&roll,&yaw);
uart通信协议与上位机
一个数据帧放同一个类型的数据,里面一个数据位就可以当成一个波形输出。上位机直接用正点的来移植,以后要控制电机,查看波形,改传入参数就行。
为什么串口1的优先级不需要比TIM6优先级高,也可以正常上传数据给上位机呢?
因为并没有用到串口1的中断,它是直接调用函数进行操作的
H桥电路
H桥电路PWM控制有三中:
- 受限单极模式:不能刹车,不能能耗制动,负载超过设定速度时不能提供反向力矩。
- 单极模式:可以刹车,不能能耗制动。刹车时不能减速到0。使用互补输出保证一个导通时,另一个一定时关断的(可加死区)
- 双极模式:电流幅值下降速度比单极模式要快,电流波动更大。电枢的电压极性时正负交替的,有负电压情况出现。PWM1占空比为50%,电机停止。大于%50,正转。小于50%反转。为100%时,最高速正转;为0%时,最高速反转。
缺点:功耗比单极模式大,会使电机发热更严重。
制作风力摆
TB6612接线
1020空心杯电机