TIVA Launchpad编程解锁好盈天行者(20A)电调

2023-05-16

电调解锁方法
2ms高电平的pwm波,400hz,持续5s以上
1ms高电平的pwm波,持续2s
即可解锁,之后输入1-2ms范围的高电平的pwm波即可控制电机的转速

这里是主函数

#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_gpio.h"
#include "debug.h"
#include "fpu.h"
#include "gpio.h"
#include "pin_map.h"
#include "rom.h"
#include "sysctl.h"
#include "uart.h"
#include "uartstdio.h"
#include "SystickTime.h"
#include "wpwm.h"


#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif


/*
*********************************************************************************************************
*	函 数 名: PrintfLogo
*	功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的串口终端软件可以观察结果
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void PrintfLogo(void)
{
	printf("*************************************************************\n\r");
	printf("* 例程名称   : %s\r\n", "基于滴答定时器的精准延时");	/* 打印例程名称 */
	printf("* 例程版本   : %s\r\n", "V1.0");		  /* 打印例程版本 */
	printf("* 发布日期   : %s\r\n", "20200310");	/* 打印例程日期 */
	printf("* 标准库版本  :TM4C123GH6PM\r\n");
	printf("* \r\n");	/* 打印一行空格 */
	printf("* QQ    : 3138372165 \r\n");
	printf("* Email : 3138372165@qq.com \r\n");
	printf("* Copyright www.nameless.tech 无名创新\r\n");
	printf("*************************************************************\n\r");
}



void ConfigureUART(void)
{
    
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);// Enable the GPIO Peripheral used by the UART.
    
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);// Enable UART0
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);// Configure GPIO Pins for UART mode.
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    // Use the internal 16MHz oscillator as the UART clock source.
    // Initialize the UART for console I/O.
    UARTStdioConfig(0, 115200, 16000000);UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
}

int fputc(int ch, FILE *f){UARTCharPut(UART0_BASE,ch);	return (ch);}
int fgetc(FILE *f) {int ch=UARTCharGet(UART0_BASE);	return (ch);}
int main(void)
{  
    ROM_FPULazyStackingEnable();//使能FPU浮点运算
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
                       SYSCTL_OSC_MAIN);//配置系统时钟   80M
	
		SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);//解锁PC口为普通IO
		HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; 
		HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x000000FF;
		GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_2);
		GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_2,0);
	
	  initTime();//初始化滴答定时器
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);//红色
		ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);//绿色
	  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);//蓝色
    ConfigureUART();//初始化串口0
    PrintfLogo();//串口打印版本信息
	
		Init_PWM();//初始化pwm
		PWM_Output(2000,2000,2000,2000);
		delay_ms(5000);
		
		PWM_Output(1000,1000,1000,1000);
		delay_ms(2000);
		
		PWM_Output(1200,1200,1200,1200);
		
    while(1)
    {
			printf("%d\r\n",PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0));
			printf("%d\r\n",PWMGenPeriodGet(PWM0_BASE, PWM_GEN_1));
			printf("%d\r\n",PWMGenPeriodGet(PWM0_BASE, PWM_GEN_2));
			printf("%d\r\n",PWMGenPeriodGet(PWM0_BASE, PWM_GEN_3));
			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);//置低位点亮
			delay_ms(100);    
			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);//置高位熄灭
			delay_ms(100);

			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);//置低位点亮
			delay_ms(100);   
			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);//置高位熄灭
			delay_ms(100);

			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);//置低位点亮
			delay_ms(100);  
			GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//置高位熄灭
			delay_ms(100);
    }
}

pwm模块的函数(这一段程序来自于无名飞控

#include "wpwm.h"
//#define PWM_PERIOD_MAX  3125//2.5ms————400hz
#define PWM_PERIOD_MAX    3125//2.5ms————400hz

#define PWM_PERIOD_MAX_20MS  (5000*8) 

static uint16_t period;
/***********************************************************
@函数名:Init_PWM
@入口参数:无
@出口参数:无
@功能描述:PWM初始化
@作者:无名小哥
@日期:2019年01月27日
*************************************************************/
void Init_PWM(void)
{
  SysCtlPWMClockSet(SYSCTL_PWMDIV_64); // Set divider to 80M/8=10M=0.1us
  SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0); // Enable PWM peripheral
  SysCtlDelay(2); // Insert a few cycles after enabling the peripheral to allow the clock to be fully activated
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // Enable GPIOB peripheral
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // Enable GPIOC peripheral
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); // Enable GPIOE peripheral
  SysCtlDelay(2); // Insert a few cycles after enabling the peripheral to allow the clock to be fully activated
  // Use alternate function
  GPIOPinConfigure(GPIO_PB6_M0PWM0);
  GPIOPinConfigure(GPIO_PB7_M0PWM1);
  GPIOPinConfigure(GPIO_PB4_M0PWM2);
  GPIOPinConfigure(GPIO_PB5_M0PWM3);
  
  GPIOPinConfigure(GPIO_PE4_M0PWM4);
  GPIOPinConfigure(GPIO_PE5_M0PWM5);
  GPIOPinConfigure(GPIO_PC4_M0PWM6);
  GPIOPinConfigure(GPIO_PC5_M0PWM7);
  // Use pin with PWM peripheral
  GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);//M0PWM0
  GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_7);//M0PWM1
  GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_4);//M0PWM2
  GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_5);//M0PWM3
  
  GPIOPinTypePWM(GPIO_PORTE_BASE, GPIO_PIN_4);//M0PWM4
  GPIOPinTypePWM(GPIO_PORTE_BASE, GPIO_PIN_5);//M0PWM5
  GPIOPinTypePWM(GPIO_PORTC_BASE, GPIO_PIN_4);//M0PWM6
  GPIOPinTypePWM(GPIO_PORTC_BASE, GPIO_PIN_5);//M0PWM7
  // Configure the PWM generator for count down mode with immediate updates to the parameters
  PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
  PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
  
  PWMGenConfigure(PWM0_BASE, PWM_GEN_2, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
  PWMGenConfigure(PWM0_BASE, PWM_GEN_3, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
  // The period is set to 2.5ms (400 Hz)
  period = PWM_PERIOD_MAX; 
  PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, period); // Set the period
  PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, period);
  
  PWMGenPeriodSet(PWM0_BASE, PWM_GEN_2, period); // Set the period
  PWMGenPeriodSet(PWM0_BASE, PWM_GEN_3, period);
  // Start the timers in generator 0 and 1
  PWMGenEnable(PWM0_BASE, PWM_GEN_0);
  PWMGenEnable(PWM0_BASE, PWM_GEN_1);
  
  PWMGenEnable(PWM0_BASE, PWM_GEN_2);
  PWMGenEnable(PWM0_BASE, PWM_GEN_3);
  // Enable the outputs
  PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT | PWM_OUT_2_BIT | PWM_OUT_3_BIT
													| PWM_OUT_4_BIT | PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT, 
													  true);
  PWM_Output(1000,1000,1000,1000);
}


/***********************************************************
@函数名:PWM_Output
@入口参数:uint16_t width1,uint16_t width2,uint16_t width3,
uint16_t width4,uint16_t width5,uint16_t width6,
uint16_t width7,uint16_t width8
@出口参数:无
@功能描述:PWM输出
@作者:无名小哥
@日期:2019年01月27日
*************************************************************/
void PWM_Output(uint16_t width1,uint16_t width2,uint16_t width3,uint16_t width4)
{
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_6,1.25*width1);//PC4 
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_7,1.25*width2);//PC5  
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_1,1.25*width3);//PB7
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_0,1.25*width4);//PB6
	
	EPWM_Output(1.25*width1,1.25*width2,1.25*width3,1.25*width4);//外接PWM口与排针PWM口输出对应
																					 //PWM1、PWM5同输出
																					 //PWM2、PWM6同输出
																					 //PWM3、PWM7同输出
																					 //PWM4、PWM8同输出	
}      


void EPWM_Output(uint16_t width5,uint16_t width6,uint16_t width7,uint16_t width8)
{
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_5,width5);//PE5
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_4,width6);//PE4
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_2,width7);//PB4
  PWMPulseWidthSet(PWM0_BASE,PWM_OUT_3,width8);//PB5
}

强烈建议在实验室里面做,实验室有仪器,即使出现问题也可以更快地找出来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TIVA Launchpad编程解锁好盈天行者(20A)电调 的相关文章

  • 关于stm32结构体

    刚刚看到stm32结构体 xff0c 这个部分还是很重要的 xff0c 做一个小结总结一下 正常标注结构体形式 struct GPIO 成员列表 这样就定义了一个结构体 xff0c 但是当需要定义变量时就需要 struct GPIO GPI
  • stm32f103c8t6 + 串口打印 + dh1

    1 首先新建一个c8t6的工程 如果使用本程序的话 xff0c 可直接运行 xff0c 亲测有效 xff0c 如果想移植功能的同学继续往下看 程序里面的注释也写的很清楚 2 串口打印 首先拿到usart c和usart h文件放置自己的工程
  • 【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读

    论文连接 xff1a https arxiv org pdf 1912 05656 pdf 代码连接 xff1a https github com mkocabas VIBE Video Inference for Human Body P
  • 操作系统——处理机调度

    2 2 处理机调度 2 2 1 调度的概念 调度的基本概念 xff1a 处理机调度是对处理机进行分配 xff0c 从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行 xff0c 以实现进程并发执行 调度的层次 xff1a 1 xf
  • ROS学习指南(五)

    IMU在ROS里的使用方法 一 IMU消息包在ROS里的数据格式 IMU是安装在机器人内部的传感器模块 xff0c 用来测量当前机器人的位姿 常用的六轴IMU可以解算出机器人xyz三个方向的角速度和角加速度 消息包定义如下 xff0c 其中
  • vins-fusion环境配置,解决opencv3->4的cv::bridge问题

    本文主要介绍如何搭建vins fusion的运行环境 xff0c 以及解决vins fusion编译运行时遇到的环境冲突问题 xff0c 并在此基础上实现例程的运行 本文是在已经安装好 ROS 的基础上 xff0c 在 Ubuntu20 0
  • 解决ROS编译过程中的简单的环境问题

    一 rosmake ERROR No arguments could be parsed into valid package or stack names 该错误是因为找不到工作目录路径 xff0c 设置为当前绝对路径名即可 xff0c
  • 《headfirst设计模式》读书笔记9-迭代器和组合模式

    目录 1 封装遍历2 定义迭代器模式2 1 部分源码2 1 1 MenuItem h2 1 2 Menu h2 1 3 Iterator h2 1 4 ArrayIterator h2 1 5 ArrayIterator cpp2 1 6
  • 【论文笔记】Stereo Camera Localization in 3D LiDAR Maps

    论文笔记 Stereo Camera Localization in 3D LiDAR Maps 随着 3D 光探测和测距 LiDAR 传感器的出现 xff0c 同步定位和映射 SLAM 技术蓬勃发展 xff0c 因此准确的 3D 地图很容
  • C盘有哪些软件可以删除呀

    今天下载QQ群里面的文件 xff0c 电脑居然弹窗 磁盘空间不足 xff0c 我心头一痛 我不是上个月才清过的吗 xff1f xff01 好吧 xff0c 那再来一次 这是我删了一通之后的C盘状态 xff1a 是不是还是很满 xff1f 没
  • Kubernetes-集群结合普罗米修斯、监控nginx、hpa动态伸缩

    目录 xff1a Prometheus简介一 k8s集群部署Prometheus二 Prometheus监控应用nginx三 prometheus实现k8s集群的hpa动态伸缩 Prometheus简介 Prometheus 是由 Soun
  • antd的Form表单如何取到表单里的数据以及如何设置默认值

    获取表单数据 第一步创建ref实例 span class token comment 在render外面 xff0c 类里面就可以 span formRef span class token operator 61 span React s
  • linux知识点——CMakeLists.txt常见指令

    demo1 单文件 只有一个main cpp的情况 main cpp span class token macro property span class token directive hash span span class token
  • 架构师面试问题

    架构师面试问题 xff1a 如何设计高可用 如何设计高并发 如何设计高扩展 如何jvm调优及管控 如何复用及重构 1 使用那些设计模式解决生产中的问题 2 架构选型过程考虑 3 如何保证开发的代码质量实践及减少生产问题 4 如何保证稳定性
  • dockerfile基础介绍

    dockerfile 官网 xff1a https docs docker com engine reference builder 构建三步骤 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行
  • 从prometheus生态系统组件到集成Java开发

    Prometheus介绍 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 于2016年加入了 Cloud Native Computing Foundation xff0c 这是继Kubernetes之后的
  • c++继承和多态

    文章目录 一 继承访问权限测试设计类A具有public protected private等不同属性的成员函数或变量 xff1b 类B通过public protected private等不同方式继承A xff0c 在类B的成员函数中测试访
  • DockerFile定义

    1 何为Dockerfile xff1f Dockerfile是用来构建Docker镜像的文本文件 xff0c 是由一条条构建镜像所需的指令和参数构成的脚本 2 构建三步骤 编写Dockerfile文件 docker build命令构建镜像
  • 死锁的成因及其解决办法

    x1f512 一 什么是死锁 死锁就是两个或者两个以上的线程在执行过程中 由于资源竞争或者由于彼此通信而造成的阻塞现象 若无外力作用 都将无法推进下去 二 关于死锁的情况 x1f937 情况 一个线程 一把锁 如果是可重入锁不会产生死锁 不
  • Ubuntu 18.04 配置ROS melodic 配置qt包并且建立基础pub界面

    建立工作空间 mkdir p ros gui demo src cd ros pkg src sudo apt get install ros melodic qt create sudo apt get install ros melod

随机推荐

  • RFID 负载调制和反向散射调制

    我用我质朴的语言概述一下我的理解 xff0c 射频识别系统中 xff0c 阅读器和标签之间的通信通过电磁波来实现 按照通信距离 xff0c 可以划分为近场和远场 xff1b 按照频率又分 xff1a 低频 高频 超高频 相应的 xff0c
  • ubuntu虚拟机上配置深度学习环境

    学习笔记 xff0c 主要是记录自己目前进行的操作 xff0c 以便自己回顾 xff0c 各位大佬有指导意见也欢迎交流啊 一 安装miniconda Linux下安装miniconda linux 安装miniconda 摸鱼肥仔的博客 C
  • 如何创建一个项目(学习笔记)

    前言 xff1a 欢迎来到本次教程 这篇文章旨在深入解析在 B 站上的 Vue3 后台管理项目 xff0c 同时也为您提供了创建此类项目的实践思路 我们将通过这个笔记系统地梳理一个项目的整体框架 xff0c 涵盖了我们在 Vue 课程中学习
  • PX4学习之uorb

    PX4学习之uorb 1线程 1 1优点 在Linux系统下 xff0c 启动一个新的进程必须分配给它独立的地址空间 xff0c 建立众多的数据表来维护它的代码段 堆栈段和数据段 xff0c 这是一种 34 昂贵 34 的多任务工作方式 而
  • 53 Command “python setup.py egg_info“ failed with error

    53 1 引言 今天在Ubuntu环境下搭建安信科技的ESP8266开发环境 xff0c 到配置这一步骤时出现了 xff0c 一个问题 xff0c 网上一顿查阅 xff0c 然后并没有实际解决 xff0c 后面查到外文blog外国朋友遇到跟
  • vue2的钩子函数

    一 定义 钩子函数是一个组件从引入到销毁的全过程中提供的函数 xff0c 我们可以在钩子函数中写我们自己的代码 xff0c 比如说请求数据 赋值 注册事件等 二 钩子函数类型 钩子函数按照组件生命周期分为 xff1a 挂载阶段 xff08
  • gazebo打不开或者无响应?

    1 打不开 xff0c 显示无路径 报错 xff1a gazebo error while loading shared libraries libblas so 3 cannot open shared object file No su
  • 【超详细】树莓派4B 英特尔神经棒2代 Openvino安装记录

    主要参考了英特尔官方文档https docs openvinotoolkit org 2019 R3 1 docs install guides installing openvino raspbian html 还有同济子豪兄在达尔文的b
  • 2021-08-19-leetcode-00001

    二分查找 704 给定一个 n 个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c 如果目标值存在返回下标 xff0c 否则返回
  • FreeRTOS系统开发指南【精简版】

    文件说明 该文件主要根据FreeRTOS系统的功能 对FreeRTOS系统应用API函数进行项目开发进行指导和快速阅览 方便用户通过该文件快速使用FreeRTOS的内部资源来进行项目开发 其中涉及任务 时间管理 队列 信号量 定时器 内存管
  • 立创EDA学习笔记(3)——PCB绘制

    使用更新 转换原理图到PCB xff0c 将原理图导入PCB后 xff0c 点击工程中的PCB切换到该页面 xff0c 接下来进行PCB绘制 目录 一 放置板框 二 绘制定位孔 三 布局 四 布线 五 修改位号丝印大小 六 添加丝印 七 添
  • A star算法在三维避障路径规划的应用

    A star算法在三维避障路径规划的应用 前言 前言 在实际工程应用中 运动目标的外形 大小直接影响到路径选择 针对三维复杂场景的碰撞检测和路径规划问题 提出了一种基于层次包围盒碰撞检测的实时路径规划优化算法 该优化算法在进行碰撞检测时 通
  • Jetson TX2零基础学习(一)——连线、刷机

    目录 一 背景介绍 二 连线 三 刷机 四 鸣谢 五 结束语 系列文章 一 背景介绍 大家好 xff0c 我是潇湘小硕士 xff0c 注册账号已经两年有余 xff0c 今天第一次发文 xff0c 希望能够帮助到大家 我是通信专业研一学生一枚
  • 嵌入式Linux C多任务编程(进程篇)

    这俩天刚整理完进程部分内容 xff0c 再做个一个总结以便后期回顾 1 什么是多任务 xff1f 单任务vs多任务 单任务 xff1a 一个任务执行结束才能执行下一个任务 xff0c 或者说在一个任务执行得过程中不能响应其他任务 xff0c
  • 如何在Ubuntu上安装Boost

    本文翻译自 xff1a How to install Boost on Ubuntu I 39 m on Ubuntu and I want to install Boost 我在Ubuntu上 xff0c 并且想安装Boost I tri
  • A D 20:基于S T M 32的DDS信号源设计

    直接数字频率合成 xff08 DDS xff09 xff1a 根据正弦函数的产生原理 xff0c 直接对输入参考时钟进行抽样 数字化 xff0c 从相位出发 xff0c 用不同的相位给出不同的电压幅度 xff0c 最后经滤波平滑输出所需的频
  • 【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍

    目录 一 SysTick定时器 1 SysTick寄存器介绍 xff08 1 xff09 控制及状态寄存器 xff08 2 xff09 重装载数值寄存器 xff08 3 xff09 当前数值寄存器 2 SysTick寄存器配置函数 二 Fr
  • 【FreeRTOS】任务调度与任务切换

    目录 一 任务调度 二 任务切换 三 关于PendSV 一 任务调度 在创建好任务函数后 xff0c 需要调用函数vTaskStartScheduler 开启任务调度器 xff0c 创建的任务在调度器的调度下执行 开启任务调度器函数为 xf
  • k8s —— pod、init 容器、及资源清单的使用

    k8s pod init 容器 及资源清单的使用 文章目录 k8s pod init 容器 及资源清单的使用podPod生命周期init 容器 资源清单查询帮助文档 实验docker 镜像批量操作k8s 常用命令pod 资源清单init 容
  • TIVA Launchpad编程解锁好盈天行者(20A)电调

    电调解锁方法 2ms高电平的pwm波 xff0c 400hz xff0c 持续5s以上 1ms高电平的pwm波 xff0c 持续2s 即可解锁 xff0c 之后输入1 2ms范围的高电平的pwm波即可控制电机的转速 这里是主函数 span