问题描述:我的情况是STM32搭载了一个小直流电机,直流电机进行PWM输出,在电机达到最高转速时的方向正反转的过程里,TFTLCD突然白屏,不再显示任何字符信息。
这是部分控制电机转速和正反转的代码
else if(t == KEY1_PRES) { Speed -= 32; if (Speed >= 0) { delay_ms(10); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); TIM_SetCompare1(TIM3,Speed); POINT_COLOR = RED ; LCD_ShowString(20,270,200,24,24," ."); LCD_ShowString(20,270,200,24,24,"+ "); LCD_ShowNum(60,270,Speed,3,24); } else { if(Speed >= -96) { delay_ms(10); GPIO_SetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits(GPIOC, GPIO_Pin_2); TIM_SetCompare1(TIM3,-Speed); LCD_ShowString(20,270,200,24,24," ."); POINT_COLOR = RED ; LCD_ShowString(20,270,200,24,24,"- "); LCD_ShowNum(60,270,-Speed,3,24); } else { Speed = 96 ; delay_ms(10); GPIO_SetBits(GPIOC, GPIO_Pin_2); GPIO_ResetBits(GPIOC, GPIO_Pin_3); TIM_SetCompare1(TIM3,Speed); POINT_COLOR = RED ; LCD_ShowString(20,270,200,24,24," ."); LCD_ShowString(20,270,200,24,24,"+ "); LCD_ShowNum(60,270,Speed,3,24); } } } else if(t == WKUP_PRES) { if(Speed >= 0) { Speed = -Speed ; delay_ms(10); PC2 = !PC2 ; PC3 = !PC3 ; POINT_COLOR = RED ; LCD_ShowString(20,270,200,24,24," ."); LCD_ShowString(20,270,200,24,24,"- "); LCD_ShowNum(60,270,-Speed,3,24); } else { Speed = -Speed ; delay_ms(10); PC2 = !PC2 ; PC3 = !PC3 ; POINT_COLOR = RED ; LCD_ShowString(20,270,200,24,24," ."); LCD_ShowString(20,270,200,24,24,"+ "); LCD_ShowNum(60,270,Speed,3,24); } }
问题发现:在电机转速未达到最高速时,用手轻轻阻止电机的转动,发现TFTLCD屏幕明显变暗
问题解决:在电机的最高转速下实现正反转,两个IO口迅速实现电流的大幅度改变,这一点导致的LCD白屏,设置IO口的输出电流不能达到最高。
目前测得在96/100时的突然变化LCD也可以正常显示,但在99/100是不可以的,关于这个可以正常实现TFTLCD的最大值是97/100、98/100,这个可以由你来测得!=-=
其实最大问题就是:供电不足!!!
如果你身边有12V直流电池,可以用其供电,效果相当好!
最后,这里讲一个我现在也不是很明白的BUG,希望得到大佬的解答!
有时候将代码烧录进入单片机后,在PC端打开串口调试助手时,LCD会突然的黑屏==
再次烧录后就可以正常显示了。。
谢谢你的观看!下篇博客再见!拜~