上位机图像处理和嵌入式模块部署(h750 mcu中的pwm控制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        所谓的pwm,其实就是方波。我们都知道,对于一个电机来说,如果插上正负极的话,那么电机就会全速运转。但是,有的时候我们希望对速度进行控制,那么这个时候pwm就派上用场了。pwm的基本原理比较简单,它就是按照频率,把信号拆分成一段一段的输出。在每一段信号当中,有的时候输出为1,有的时候输出为0,如果1的比例越大,那说明现在上位机希望进行加速处理;反之1的比例越小,就说明这个时候希望的操作,是对电机进行减速处理。实际操作中,一般mcu和电机之间有一个驱动器,我们通过pwm控制驱动器,就可以实现对电机的控制了。

        因为没有电机,所以这次我们希望用pwm实现一个呼吸灯的效果。所谓的呼吸灯,就是一开始led越来越亮,接着就是越来越暗,周而复始。因为手边h750开发板上led灯损坏,这一次就用了stm32f103c8t6做了代替测试,基本原理是一样的。

1、硬件搭建

        之前的led连接的是pc13,我们这里是利用tim对pa0进行控制的。所以,我们所要做的就是把pa0和pc13短接在一起就好了。

2、初始化pwm

        目前stm32系列的mcu都是通过tim定时器来实现pwm输出的,pwm从哪个gpio输出,这个也是要通过芯片手册提前设计好的。大部分代码内容都是差不多的,大家可以把重点放在pin脚、周期设定、分频等重要参数的设置上。

void PWM_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 200 - 1;		//ARRTIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;		//PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;		//CCRTIM_OC1Init(TIM2, &TIM_OCInitStructure);TIM_Cmd(TIM2, ENABLE);
}

3、设置空占比

        空占比,也就是有效信号占单个周期信号的比例,这个数值非常重要。大家使用的时候需要注意下。

void PWM_SetCompare1(uint16_t Compare)
{TIM_SetCompare1(TIM2, Compare);
}

4、实现呼吸灯效果

        正如之前所示,呼吸灯就是一个pwm空占比从低到高、再从高到底的一个过程。做好了这一点,基本上就实现了呼吸灯的效果。

	while (1){for (i = 0; i <= 200; i++){PWM_SetCompare1(i);Delay_ms(10);}for (i = 0; i <= 200; i++){PWM_SetCompare1(200 - i);Delay_ms(10);}}

5、TIM定时器的另有一个用法-编码器

        在stm32 mcu上面一般有两种定时器。一种是systick,一般用作系统中断使用,类似于给rtos做1ms中断使用;还有一种就是tim。tim有普通定时器和高精度定时器。不过用的比较多的场景,就是用tim定时器实现pwm输出,以及实现电机编码器的读取。

        有了电机编码器相当于就有了一个反馈信号,我们通过这个编码器就可以算出电机的当前速度。借助于这个反馈量,就可以提示我们下一步是提高pwm空占比,还是降低pwm空占比,这样才能达到最终的控制速度。

6、测试和验证

        因为暂时手上没有示波器,所以只能通过led灯的明暗程度,来粗略判断下当前pwm是不是真的有效果。这一点和之前ad/da测试有点像,当时也是只能定性地去分析驱动设置有没有发生作用。如果要真正地看输出信号是否准确,归根到底还是要通过示波器等精密一点的设备去进行连接和判断。

注:

        实验过程中发生一个有趣的现象,那就是用st-link v2烧入低功耗程序之后,st-link v2就没有办法烧录了,一直提示“internal command error”。但是长按reset又可以识别mcu,有点奇怪。直到boot和3.3v用短接帽短接后,重新st-link v2连接才能烧入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建筑工程设计资质政策影响分析

对建筑企业的影响&#xff1a;资质门槛的降低或调整&#xff0c;可能会吸引更多中小企业进入市场&#xff0c;加剧市场竞争&#xff0c;但也促使企业更加专注于提升自身的专业服务能力。 对于大型企业来说&#xff0c;政策利好可能体现在简化资质管理带来的效率提升&#xff0…

leetcode (top100)盛最多水的容器

题目&#xff1a; 题解&#xff1a; 第一种可行的方案&#xff1a; 设置左指针指向第一条线&#xff0c;设置右指针指向最后一条线。每次向中间移动两条线中最短的一条&#xff0c;计算移动过程中最大接水量。 本题可以看出影响接水量的有两个因素&#xff0c;两条线的距离&…

PHP反序列化

PHP反序列化 什么是反序列化操作&#xff1f; 类型转换 - PHP & JavaEE & Python&#xff08;见图&#xff09; 序列化&#xff1a;对象转换为数组或字符串等格式 反序列化&#xff1a;将数组或字符串等格式转换成对象 serialize() //将对象转换成一个字符串 un…

配置小程序

小程序配置 1.全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。 完整配置项说明请参考小程序全局配置 以下是一个包含了部分常用配置选项的 app.json &#xff1a; {&q…

NVIDIA-最适合工作的公司第三位

NVIDIA 在《财富》杂志和卓越职场&#xff08;Great Place to Work&#xff09;最新评选出的“100 家最适合工作的公司”榜单上跃居第三位。 这是 NVIDIA 连续第八年上榜&#xff0c;也是在这个广受关注的榜单上排名最高的一次。该榜单有超过一千多家企业参与评选。去年 NVIDIA…

解决Linux下Java应用因内存不足而崩溃的问题

在Linux系统中运行内存密集型的Java应用时&#xff0c;经常会遇到因系统内存不足而导致应用崩溃的问题。本文将探讨如何诊断这类问题以及提供有效的解决方案。 问题诊断 首先&#xff0c;使用 free -h 命令查看系统的内存使用情况&#xff0c;得到以下输出&#xff1a; total…

聚观早报 | 小米15配置规格曝光;比亚迪车险开售

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月19日消息 小米15配置规格曝光 比亚迪车险开售 真我GT6细节曝光 极星汽车加速全球扩张 Model 3高性能版开启交…

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型&#xff0c;从上到下为多边形&#xff08;常…

node-gyp在windows安装出错解决方案

错误1&#xff1a; error Error: getaddrinfo ENOTFOUND registry.nlark.com at GetAddrInfoReqWrap. 解决1&#xff1a; 修改yarn.lock文件里registry.nlark.com 改为 registry.npmmirror.com 错误2&#xff1a; gyp verb check python checking for Python executable &…

windows 程序右键管理员点击无响应

Windows 程序在右键单击以管理员身份运行时没有响应&#xff0c;可能是由于多种原因引起的。下面是一些常见的问题和解决方案&#xff1a; 1. 用户账户控制 (UAC) 设置问题&#xff1a; - 试着降低或提高 UAC 设置&#xff0c;然后再试一次。可以在控制面板的“用户账户”部…

计算机的五大功能部件应用及特点

目录 计算机的五大功能部件 1.现代计算机的结构 2.主存储器 ​​​​​​​ 3.运算器 4.控制器 5.各部件的特点 5.1主存特点 5.2外存特点 5.3运算器特点 5.4控制器特点 计算机的五大功能部件 1.现代计算机的结构 一般将运算器和控制器集成到同一个芯片上&#xff…

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 &#x1f944; 简单 由于主应用微应用都能做到技术栈无关&#xff0c;qiankun 对…

CCS条形光源——HLDL3系列,长距离和宽范围照射应用的不二之选

机器视觉系统中&#xff0c;光源起着重要作用&#xff0c;不同类型的光源应用也不同&#xff0c;选择合适的光源成像效果非常明显。今天我们一起来看看CCS光源——工业用条形光源HLDL3系列。 高亮LED光源HLDL3系列 适用于长距离和宽范围照射的条形光源。 适用于各种检测案例&a…

LabVIEW如何进行电磁兼容性测试

电磁兼容性&#xff08;EMC&#xff09;测试是确保电子设备在其工作环境中能够正常运行且不会对其他设备产生有害干扰的关键步骤。LabVIEW作为一种强大的系统设计和开发工具&#xff0c;可以有效地用于电磁兼容性测试。以下是如何使用LabVIEW进行电磁兼容性测试的详细步骤和方法…

AlmaLinux 更换CN镜像地址

官方镜像列表 官方列表&#xff1a;https://mirrors.almalinux.org/CN 开头的站点&#xff0c;不同区域查询即可 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/AlmaLinux_Update_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author:…

HTML5 服务器发送事件(Server-Sent Events, SSE):实时数据传输的新篇章

在实时Web应用领域&#xff0c;HTML5 引入的 Server-Sent Events (SSE) 技术提供了一种轻量级的通信机制&#xff0c;使得服务器能够主动向客户端推送数据。与WebSocket相比&#xff0c;SSE更加简单易用&#xff0c;特别适合于单向通知、实时更新等场景。本文将深入探讨SSE的工…

Python8 使用结巴(jieba)分词并展示词云

Python的结巴&#xff08;jieba&#xff09;库是一个中文分词工具&#xff0c;主要用于对中文文本进行分词处理。它可以将输入的中文文本切分成一个个独立的词语&#xff0c;为后续的文本处理、分析、挖掘等任务提供基础支持。结巴库具有以下功能和特点&#xff1a; 中文分词&a…

大文件上传实现

分片上传 将大文件分割成多个小片&#xff08;chunk&#xff09;&#xff0c;逐个上传。每个片上传成功后&#xff0c;服务器可以返回确认信息。所有片上传完成后&#xff0c;服务器端将这些片重新组合成原始文件。 以下是一个简单的分片上传的前端实现示例&#xff1a; func…

C#——文件读取StreamRead和StreamWriter类详情

文件读取StreamRead和StreamWriter类 StreamReader 用于从字节流中读取字符StreamWriter 用于向一个流中写入字符 使用 读取 // using 使用&#xff0c;语句可以省去关闭StreamReader读写流 using (StreamReader sr new StreamReader("1.txt", Encoding.UTF8)) …

LVGL开发教程-Label文本

系列文章目录 知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 ​编辑 1. 文本显示 2. 使用字体 总结 前言 在嵌入式系统开发中&#xff0c;文本显示是一项基本而重要的功能。使用 LittlevGL&#xff08;LVGL&#xff09;库&#xff0c;我们可以轻松地创建…