我是假管贴心小助手
获得 390 次赞
帮助过458人
波形变为正弦波,说明你的电路上存在问题吧,可能是你的ds18b20的数据引脚上存在一个电容,导致信号波形发生畸变。至于你说的能检测到传感器,但是读不出数据,这应该就是延时时间导致的,这个传感器对时间要求还是比较严格的,在编程的时候要多留意,最好有个逻辑分析仪就好办了。我之前在使用103驱动ds18b20的时候,发现一个问题,就是只要我初始化定时器后,一旦使能定时器,定时器就会立马发生一个中断事件,而从使能定时器到这个中断发生刚好符合ds18b20的复位电平,好像是750ns左右。而且我程序移植到407芯片也是一样。也就是说,只要是定时器初次使能,就会自动出现一个定时器中断请求。不知道你的M0芯片存不存在这个问题。
这个芯片的内部就是一个相当于4个mos管组成的H桥电路,你也可以不使用L298N,使用独立的元器件也能达到一样的效果。可以使用四个mos管就能实现。调节使能端的PWM达到调速是因为,当你调节PWM的时候,就控制了mos管的通断,改变接通mos管的时间长度,就能实现调速。
个人感觉可以检测电调的电源电流,通过电源电流可以测出电机是否卡死,或者是空转。至于短路和断路应该也是能检测到的,只要电机的电流不在正常范围的话,短路电流与断路电流应该是有比较明显的差别。
stm32的所有的IO口是可以输出PWM的,但是有些端口需要软件定时翻转引脚电平状态的方式实现,有些引脚则可以直接使用内部的定时器外设直接输出。具体哪个引脚可以使用内部硬件直接输出,还是查看一下手册吧,手册上引脚的复用功能中能够复用到定时器输出的引脚就能够直接硬件输出PWM。
如果你的下载器是下图中这样的话,就有5v输出,而且还有3.3v输出。但是下载器提供的电源功率小,负载能力不怎么强。如果你的板子上显示屏之类的器件,就不要用下载器供电了,输出不够。
stm32的引脚是可以容忍5v电平输入,但是在AD转换的时候,最大模拟量电压不能超过芯片的工作电压,也就是3.3v。因为芯片的AD转换模块工作的是,一般是使用芯片电源电压做数模转换的参考电压。
可以定义一个串口指令,比方说,当串口收到一个特定的指令后,就代表要进行程序升级,此时可以使用函数指针的方式跳转到IAP程序内执行。APP中的函数指针变量需要一个IAP程序的入口地址。
这个问题主要应该是你的马达电机干扰到电源部分了,导致供电不稳定,单片机检测到电源电压突变时就会自动复位的。现在好多单片机都有这个低电压复位功能。