标题:
STM32F103C8T6串口控制PWM直流电机调速、继电器、LED、光电检测
[打印本页]
作者:
z1738115850
时间:
2018-7-14 20:49
标题:
STM32F103C8T6串口控制PWM直流电机调速、继电器、LED、光电检测
这个是之前做的一个项目,属于半成品,因为没有上位机。可以通过串口软件给单片机发送1~6的指令来控制单片机外设,附有电路图。
用keil5开发的。
程序分为串口控制和按键控制。里面都有注释。有类似需求的可以下载下来参考看看。经常来51黑逛,求坛主多赏一点积分
电路原理图如下:
0.png
(131.41 KB, 下载次数: 147)
下载附件
2018-7-14 21:58 上传
单片机源程序如下:
#include "motor.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "led.h"
extern u16 Pump_pwm; //水泵PWM值
extern u8 R;
extern u8 On;
int main(void)
{
/*----------------变量定义------------------*/
vu8 key; //得到按键的键值
// u16 a; //存放键值
// vu8 Status; //存放传感器状态
// u16 b; //存放键值
key=0;
// Status=0;
R=0; //系统运行标志位//1表示正在运行
Pump_pwm=0;//默认水泵速度为低速
///////////////////////////////初始化/////////////////////////////////////////////////////
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200,开启串口中断
Motor_Init(); //电机端口初始化
LED_Init(); //指示灯端口初始化
KEY_Init(); //按键初始化
TIM3_PWM_Init(899,79); //PWM初始化、80分频。PWM频率=72000000/(900*80)=1Khz arr/psc
M_Stop(); //系统初始状态为停止
LED5=0;
Beep = 1;
////////////////////////PWM调速范围0~65535/ARR寄存器的值/////////////////////////////2的16次方
//频率://Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)占空比://duty circle = TIM3->CCR1 / arr(单位:%)
////////////////////////////////初始化结束/////////////////////////////////////////////////
//////////////////////////////开始检测当前饲料余量并扫描键值////////////////////////////////////////////
while(1)//键值判断
{
key=KEY_Scan(0); //获取按键键值
/*********传感器检测*********/
if(KEY6==0)
{
delay_ms(10);
if(KEY6==0)
{
LED4=1;//无料指示灯灭
}
}
if(R==1)
{
if(KEY7==1)
{
delay_ms(10);
if(KEY7==1)
{
M_Stop(); //停止运行
R=0;
LED4=0; //无料指示灯亮
Beep=0;//蜂鸣器报警1S
delay_ms(1000);
Beep=1;
printf("a号机器料桶已空。/n");
}
}
if((R==1)&&(KEY8==0))
{
delay_ms(10);
if(KEY8==0)
{
M_Stop();//食槽已满,停止供料
}
}
if((R==1)&&(KEY9==1))
{
delay_ms(10);
if(KEY9==1)
{
M_Run(); //食槽中的料被吃完,运行电机上料
}
}
}
/*-----------------------按键检测----------------------------*/
if(key==1)
{
M_Run();//开始运行
R=1;//标志位置1
}
if(key==2)//PWM调节
{
Pump_pwm=0;
LED5=0;
LED6=1;
LED7=1;
}
if(key==3)
{
Pump_pwm=300;
LED5=1;
LED6=0;
LED7=1;
}
if(key==4)
{
Pump_pwm=500;
LED5=1;
LED6=1;
LED7=0;
}
if((R==0)&&(key==5))
{
Pump_Run();
}
if(key==6)
{
M_Stop();
R=0;//清除标志位
}
TIM_SetCompare2(TIM3,Pump_pwm);//设置PWM定时器参数
// Status = 0;
key = 0;
/*-------------------------------------------------------------*/
}
}
复制代码
所有资料51hei提供下载:
饲喂机源码.rar
(409.32 KB, 下载次数: 524)
2018-7-14 22:00 上传
点击文件名下载附件
包里面有电路图
下载积分: 黑币 -5
作者:
jubaolun
时间:
2019-2-13 18:32
看看,学习下。
作者:
bluecar
时间:
2019-3-3 16:24
学习下
作者:
gcgg
时间:
2019-5-1 12:07
没有用到串口通信控制吗
作者:
z1738115850
时间:
2019-5-10 19:39
gcgg 发表于 2019-5-1 12:07
没有用到串口通信控制吗
用到了,串口中断里有操作。这个是早期学习的时候写的程序,程序结构不太规范
作者:
aaaaaa。
时间:
2019-6-14 17:10
谢谢分享
作者:
weijh1023
时间:
2019-6-19 09:22
支持原创资料!
作者:
Jackis
时间:
2019-6-26 13:22
太感谢了,最近正在画STM32的最小系统。
作者:
WFX777888
时间:
2019-7-16 05:38
谢谢分享资料
作者:
190222
时间:
2019-10-1 21:47
学习洋桃的教程?
作者:
nihaobu
时间:
2019-11-26 11:23
看看,学习下。
作者:
xx不放火
时间:
2023-2-23 16:13
参考的正点原子吗?
作者:
x-i-n-r-e-n
时间:
2023-4-11 16:16
厉害,这里继电器的使用是通过GPIO的那种输出方式呢
作者:
249449417@qq.co
时间:
2024-5-21 10:24
长期使用delay函数不好使。。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1