当前位置: 首页 > news >正文

哈尔滨网站建设费用跨境电商怎么搞

哈尔滨网站建设费用,跨境电商怎么搞,推广管理,哪些做图片赚钱的网站STM32 出租车计价器系统设计 功能目标 驱动步进电机模拟车轮旋转,并实现调速功能。 设置车轮周长和单价,检测车轮转速和运转时间。 计算并显示行驶里程和价格。 硬件材料 28BYJ48 五线四相步进电机和 ULN2003 驱动板模块 测速传感器模块 嵌入式小系统…

STM32 出租车计价器系统设计

功能目标

驱动步进电机模拟车轮旋转,并实现调速功能。
设置车轮周长和单价,检测车轮转速和运转时间。
计算并显示行驶里程和价格。

硬件材料

28BYJ48 五线四相步进电机和 ULN2003 驱动板模块
测速传感器模块
嵌入式小系统STM32
电源模块

在这里插入图片描述

出租车计费规则假设:

unit_price:设置每圈的价格为 1 元。
distance_of_qibu:设定起步距离为 1000cm,起步价为 7.5 元。
price、distance:分别用于存储当前价格和行驶距离,初始值为 0。
circumference:假设车轮周长为 200cm

float unit_price = 1;
int distance_of_qibu = 1000;
float price = 0;
float distance = 0;
float circumference = 200;

OLED 显示初始化内容

OLED_ShowString(1, 1, "Speed:");
OLED_ShowString(2, 1, "unit_price:");
OLED_ShowString(2, 14, "r");
OLED_ShowString(3, 1, "distance:");
OLED_ShowString(4, 1, "price:");

while中 OLED更新显示

OLED_ShowNum(1, 12, Speed - 1, 3);
OLED_ShowNum(2, 13, unit_price, 1);
OLED_ShowNum(3, 10, distance, 5);
OLED_ShowFNum(4, 10, price, 4, 2);

OLED 界面
在这里插入图片描述

电机驱动

主要就是步进电机的控制,单片机IO口驱动能力较差,所以需要驱动模块
这里使用 ULN2003 驱动 步进电机28BYJ48

电机驱动代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Key.h"
#include "Stepper.h"uint8_t STEP;	// 用于存储电机正在走过的整步编号
/*** @brief  步进电机输出端GPIO初始化函数* @param  无* @retval 无*/
void Stepper_GPIOInit(void)
{// 选择PA0,PA1,PA2,PA3分别为相A,B,C,D的输出RCC_APB2PeriphClockCmd(Stepper_CLK, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;	// 推挽输出GPIO_InitStruct.GPIO_Pin = Stepper_LA | Stepper_LB | Stepper_LC | Stepper_LD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(Stepper_Output_GPIO, &GPIO_InitStruct);GPIO_ResetBits(Stepper_Output_GPIO, Stepper_LA | Stepper_LB | Stepper_LC | Stepper_LD);
}/*** @brief  电机停转函数* @param  无* @retval 无*/
void Stepper_Stop(void)
{GPIO_ResetBits(Stepper_Output_GPIO, Stepper_LA | Stepper_LB | Stepper_LC | Stepper_LD);
}/*** @brief  4拍单相整步驱动函数* @param  StepNum 	整步编号,0~3对应A~D* @param	Delay_Time_xms 		每步旋转后延时时间x ms,用于控制步进电机速度(一般需大于等于2)* @retval 无*/
void Stepper_SingleStep(uint8_t StepNum, uint16_t Delay_Time_xms)
{switch(StepNum){case 0:		// AGPIO_WriteBit(Stepper_Output_GPIO, Stepper_LA, Bit_SET);GPIO_WriteBit(Stepper_Output_GPIO, Stepper_LB | Stepper_LC | Stepper_LD, Bit_RESET);break;case 1:		// BGPIO_WriteBit(Stepper_Output_GPIO, Stepper_LB, Bit_SET);	GPIO_WriteBit(Stepper_Output_GPIO, Stepper_LA | Stepper_LC | Stepper_LD, Bit_RESET);break;			case 2:		// CGPIO_WriteBit(Stepper_Output_GPIO, Stepper_LC, Bit_SET);	GPIO_WriteBit(Stepper_Output_GPIO, Stepper_LA | Stepper_LB | Stepper_LD, Bit_RESET);break;case 3:		// DGPIO_WriteBit(Stepper_Output_GPIO, Stepper_LD, Bit_SET);GPIO_WriteBit(Stepper_Output_GPIO, Stepper_LA | Stepper_LB | Stepper_LC, Bit_RESET);break;default: break;}Delay_ms(Delay_Time_xms);	// 延时,控制电机速度Stepper_Stop();				// 断电,防止电机过热
}/*** @brief  步进电机按步旋转* @param  direction		电机旋转方向,可以是Foreward(正传)或者Reversal(反转)* @param	step			电机转过的步数* @param	Delay_Time_xms	每步旋转后延时时间x ms,用于控制步进电机速度(一般需大于等于2)* @retval 无*/
void Stepper_RotateByStep(RotDirection direction, uint32_t step, uint16_t Delay_Time_xms)
{for (uint32_t i = 0; i < step; i ++){if (direction == Foreward)	// 电机正传{STEP ++;if (STEP > 3){STEP = 0;}}else if (direction == Reversal)	// 电机反转{if (STEP < 1){STEP = 4;}STEP --;}Stepper_SingleStep(STEP, Delay_Time_xms);}}/*** @brief  步进电机按整数圈旋转* @param  direction		电机旋转方向,可以是Foreward(正传)或者Reversal(反转)* @param  Loop			电机旋转的圈数* @param  Delay_Time_xms	每步旋转后延时时间x ms,用于控制步进电机速度(一般需大于等于2)* @retval */
int Stepper_RotateByLoop(RotDirection direction, uint32_t Loop, uint16_t Delay_Time_xms)
{Stepper_RotateByStep(direction, Loop * 2048, Delay_Time_xms);return Loop;
}
#ifndef __STEPPER_H_
#define __STEPPER_H_// 电机的旋转方向
typedef enum 
{Foreward = 0,Reversal = 1
} RotDirection;// 需要使用其他端口时,只需要更改以下的宏定义即可
// 这里需要保证四个输出端口同属一个GPIO
// 如果不能满足这一点,需要更改Stepper.c中初始化函数Stepper_Init和Stepper_RotateByStep中的一些变量名称
// 这里的宏定义是为了提高程序的可读性和可移植性,但使用stm32f10x.h中定义的原始名称也未尝不可
#define		Stepper_CLK				RCC_APB2Periph_GPIOA
#define		Stepper_Output_GPIO		GPIOA
#define 	Stepper_LA				GPIO_Pin_0
#define 	Stepper_LB				GPIO_Pin_1
#define 	Stepper_LC				GPIO_Pin_2
#define 	Stepper_LD				GPIO_Pin_3void Stepper_GPIOInit(void);
void Stepper_Stop(void);
void Stepper_SingleStep(uint8_t StepNum, uint16_t Delay_Time_xms);
void Stepper_RotateByStep(RotDirection direction, uint32_t step, uint16_t Delay_Time_xms);
int Stepper_RotateByLoop(RotDirection direction, uint32_t Loop, uint16_t Delay_Time_xms);#endif

上面是电机驱动.c .h文件 接线也很简单 看宏定义就可以,想要具体原理,可以看网上的资料

用杜邦线接线真的很麻烦,后面准备简单画一个PCB
在这里插入图片描述

通过按键实现电机调速,这边加上按键中断会比较好。因为步进电机的简单代码中,会有延时函数,导致按键没有被读到。
也可以通过PWM控制电机进行调速。

有问题可以私聊我

http://www.yayakq.cn/news/450312/

相关文章:

  • 漳州 网站设计深圳建筑工地招工平台
  • 文化馆网站建设解决方案安徽seo
  • 童装东莞网站建设技术支持广州 网站建设网络推广网页设计
  • 分析北师大教育学原理网站建设搭建网站工具
  • 网站经营性质百度竞价投放
  • 简述制作网站的流程co域名网站
  • 咸宁手机网站建设网站托管及维护
  • vs做网站连数据库网建会是什么意思
  • 网站有什么深圳网络营销的推广
  • 巴中微信网站建设大批量刷关键词排名软件
  • 智冠宝企业网站管理系统织梦 网站地图
  • 网站怎么做防御四川手机网上营业厅
  • 网站开发都有哪些语言做网站建设的好处
  • 俄罗斯网站制作找网络公司做网站需要注意
  • 2016用什么网站程序做流量网页开发和游戏开发
  • 做网站哪个软件好用设计网站推荐知乎
  • 做代理的项目在哪个网站巩义网站建设工程
  • 移动手机号码网站山西网架公司
  • 施工员证怎么查询网站网站内容有什么
  • 亳州网站建设推广网页制作教程视频自学
  • php网站后台密码忘记了兰州手机网站
  • 虚拟主机怎么做网站网上怎么做销售
  • 做ppt好用的网站如何做淘宝返利网站
  • 惠州做棋牌网站建设哪家服务好在aws上安装WordPress
  • 做生鲜管理系统的网站建设一个网站需要哪些员工
  • php网站开发源码制作网页费用
  • 做透明头像的网站相对于网站根目录的的绝对路径
  • 一个服务器做多个网站网站概念设计
  • 做外贸生意的网站建设银行对账单查询网站
  • 网站怎样做银联支付接口哪里有手机网站建设