嵌入式PWM实验报告

这篇具有很好参考价值的文章主要介绍了嵌入式PWM实验报告。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验报告书

一、实验内容与目的

实验内容

通过对Exynos4412PWM的操作,控制实验箱的蜂鸣器实现发声,并播放音乐。

实验目的

  1. 掌握使用Cortex-A9控制PWM的方法。
  2. 掌握Cortex-A9PWM寄存器的配置方法。
  3. 掌握驱动的编写步骤。
  4. 熟悉VMware+RedHat+XShell+ARM-Linux交叉编译开发环境。

二、实验原理与程序(原理图、程序流程图、程序等)

PWM0_BUZZER原理图(底板原理图)

嵌入式PWM实验报告

 

其连接引脚XpwmTOUT0_C(底板原理图)

嵌入式PWM实验报告

 

 

Exynos4412原理图:

嵌入式PWM实验报告

 

得:PWM0_BUZZER>>XpwmTOUT0_C>>GPD0_0

程序流程图

嵌入式PWM实验报告

 

程序代码

驱动文件的核心代码

①初始化函数:init

static int fs4412_pwm_io_init()

{

    writel((readl(pwm->gpd0con) & ~(0xf)) | 0x2,pwm->gpd0con);

    //设置GPD0CON控制寄存器[3:0]的值为0x2, 则TOUT0信号会输出PWM信号。

    writel((readl(pwm->timer_base+TCFG0) & ~(0Xff) | 0xc7,pwm->timer_base+TCFG0);

       //一级分频  分频值为199  即200分频   199的16进制为0xC7

    writel((readl(pwm->timer_base + TCFG1) & ~(0xf) | 0x2,pwm->timer_base + TCFG1);

      //二级分频,选分频值为1/2 即2分频

    writel(600,pwm->timer_base+TCNTB0);

    //pwm初值为600

    writel(300,pwm->timer_base+TCMPB0);

    //pwm电平翻转值为300

    writel(readl(pwm->timer_base+TCON) & ~(0xf) | 0x2,pwm->timer_base+TCON);                                                   

       //定时器手动更新,即加载TCNTB0 和 TCMPB0的值

    return 0;

}

②与驱动程序相关联的函数:ioctl

static long fs4412_pwm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

{

    int data;

    if (_IOC_DIR(cmd) == _IOC_WRITE)

        if (copy_from_user(&data, (void *)arg, sizeof(data)))

            return -EFAULT;

    switch(cmd)

    {

    case PWM_ON:

        writel(readl(pwm->timer_base+TCON) & ~(0xf) | 0x9,pwm->timer_base+TCON);

        //设置寄存器TCON,使定时器开启,并启用自动重载

        break;

    case PWM_OFF:

        writel(readl(pwm->timer_base+TCON) & ~(0xf) ,pwm->timer_base+TCON);

        //设置寄存器TCON,使定时器关闭,低四位清零

        break;

    case SET_PRE:

        writel(readl(pwm->timer_base+TCFG0) & ~(0xff) | (data & 0xff),pwm->timer_base+TCFG0);

        //设置寄存器TCFG0的值,低八位先清零,再根据应用程序数据传过来的数据进行低八位设置

        writel(readl(pwm->timer_base+TCON) & ~(0xf) | 0x9,pwm->timer_base+TCON);

        //定时器开启,并启用自动重载

        break;

    case SET_CNT:

        writel(data,pwm->timer_base+TCNB0);

         //设置pwm定时器的初值TCNB0

        writel(data/2,pwm->timer_base+TCMPB0);

         //设置pwm定时器的翻转值TCMPB0

        break;

    }

    return 0;

}

③标记化赋值函数(作用:提供文件系统入口点函数,就可访问设备驱动程序):fops

static struct file_operations fs4412_pwm_fops = {

    .owner = THIS_MODULE,

    .open = fs4412_pwm_open,

    .release = fs4412_pwm_rlease,

    .unlocked_ioctl = fs4412_pwm_ioctl,

};

驱动文件Makefile文件代码

obj-m := fs4412_pwm.o

KERNELDIR := /CBT-SuperIOT/linux-3.5

default:

    make -C $(KERNELDIR) M=$(shell pwd) modules

clean:

    rm -rf *.o  *.ko  *.mod.*   modules.*  Mo*.*

应用程序的核心代码

//打开pwm定时器cmd为 PWM_ON ,入口函数int ioctl(int fd ,int cmd ) ;

ioctl(dev_fd,PWD_ON);

//设置pwm定时器的频率,cmd为SET_PRE入口函数int ioctl(int fd , int cmd , char *argp );

ioctl(dev_fd,SET_PRE,&pre);

while (1){

for(i = 0;i<sizeof(MotherLoveMeOnceAgain)/sizeof(Note);i++ )

{

div = (PCLK/199/2)/(MotherLoveMeOnceAgain[i].pitch);

//设置pwm定时器的CNT值, cmd为SET_CNT,把div作为参数传入入口函数int ioctl(int fd , int cmd , char *argp );

ioctl(dev_fd,SET_CNT,&div);

usleep(MotherLoveMeOnceAgain[i ].dimation *50);

}

应用程序Makefile文件代码

CC = arm-linux-gcc

TARGET = All

OBJECT = pwm_test.o

$(TARGET):$(OBJECT)

    $(CC) $(OBJECT) -o pwm_test

$(OBJECT):test_pwm.c

    $(CC) -c test_pwm.c -o $(OBJECT)

clean:

    rm *.o pwm_test

三、实验操作步骤

硬件驱动编译、加载、运行步骤

  1. 编译驱动程序

编写fs4412_pwm.c驱动文件在pc端的Linux系统下编写

编写驱动文件的编译文件Makefile

使用make命令运行Makefile文件,使fs4412_pwm.c文件生成pwm.ko的内核模块文件

  1. 编译应用程序

编写pwm_test.c驱动文件在pc端的Linux系统下编写

编写驱动文件的编译文件Makefile,make一下

配置交叉开发环境

①连接Cortex-A9的3根线:电源线、串口线、网线。

②配置网络IP地址。

  1. PC Linux网络与PC主机在同一网段
  2. Cortex-A9网络与PC(或PC Linux)在同一网段内
  3. Ping: Cortex-A9和PC Linux是否可以通
  4. 关闭PC Linux端的防火墙和NFS服务

③使用XShell来连接Cortex-A9,并将PC Linux系统下的/CBT-SuperIOT目录挂载到Cortex-A9系统下的/mnt目录下

  1. 加载驱动程序

将内核文件加载到Linux系统的内核里面:insmod adc.ko

  1. 创建设备文件

生成设备文件mknod /dev/pwm c 500 0

  1. 运行应用程序

进入adc应用程序的目录中运行:./pwm_test

四、实验结果与总结

实验结果

     蜂鸣器可播放pwm_music.h文件的音乐。

实验总结文章来源地址https://www.toymoban.com/news/detail-465029.html

  1. 学习到了PWM的工作原理
  2. PWM需首先设置定时器对应引脚的复用选择。
  3. 设置定时器的输入工作频率的分频。
  4. 设置定时器的计数初值和比较寄存器。
  5. 最后设置定时的工作模式,并启动定时器。

到了这里,关于嵌入式PWM实验报告的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式学习笔记——PWM与输入捕获(下)

    上一篇介绍了通用定时器的输出比较部分,这一篇再来介绍一下输入捕获的相关内容。 输入捕获,见名知意,就用来对输入信号进行捕获的,说到捕获输入信号,之前介绍过一个叫做外部中断的片上外设,它的作用也是捕获输入;它们的不同在于,外部中断捕获的只是边沿,

    2024年02月06日
    浏览(40)
  • 嵌入式系统课程设计报告

    嵌入式系统课程设计报告 题目7(序号) 学生成绩查询系统(题目)              专    业:       软件工程          班    级:       软件二班                  姓    名:          xx                 学    号:             2019320100   

    2024年02月13日
    浏览(41)
  • 【蓝桥杯】【嵌入式组别】第十三节:PWM输入捕获编程

    目的就是测量输入到特定管脚上的PWM波的频率和占空比。 下面是PWM部分的电路图: PWM由XL555芯片产生,由滑动变阻器R40连接到PA15,滑动变阻器不同的阻值对应不同的PWM波的频率。下面一个也是一样的原理。 可以看到板子上的PA15引脚的功能分别有:TIM2_CH1和TIM8_CH1,我们在板

    2023年04月11日
    浏览(101)
  • 嵌入式-stm32-用PWM点亮LED实现呼吸灯

    答:LED需要低电平才能亮,高电平是灯灭。 答:这是用到不同占空比来实现的,控制LED实现呼吸灯,就是通过占空比的高低电平和其持续时间来实现。 ①例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72Mhz。 ②假如频率为 2kHz ,则:PSC=71,ARR=499, 频率和周期是描述波形的两个基

    2024年02月03日
    浏览(94)
  • 嵌入式系统开发13——STM32输出PWM实现呼吸灯

    本文主要介绍在STM32F103C8T6上,利用定时器输出PWM波形,进而驱动LED实现呼吸灯。 使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果。 脉冲宽度调制(PWM) ,是

    2023年04月08日
    浏览(84)
  • 【嵌入式】HC32F定时器PWM捕获+APC芯片实现模拟AD采样

    目录 一 项目背景 二 原理说明 三 设计实现——定时器初始化 四 设计实现——PWM捕获 五 梳理总结         目前使用了TI的ADC采样芯片 ADS1018实现模拟量4-20mA/0-20mA的采样 ,原理是 将外部输入的模拟量信号4-20mA,经由并联的两个100Ω电阻,转换为0.2-1V的电压信号传递到模数转

    2023年04月24日
    浏览(47)
  • 嵌入式LinuxLED驱动开发实验

    我们在裸机实验的时候,都是通过配置底层的寄存器来进行点亮LED灯的操作的。我们现在还没有学习到设备树的相关知识,所以,我们也是通过在字符设备驱动框架的基础上来配置底层寄存器来实现LED灯的点亮,但是,与之前不同的是,在Linux系统中会存在地址映射的方式,

    2024年02月15日
    浏览(53)
  • stm32嵌入式实验考核

    STM32 实验考核题目 1. 利用 STM32 小板实现:控制外接 LED 灯每隔 3 秒钟亮暗变换,同 时在 PC 机上显示 MCU 的计时时间,MCU 的初始时间由 PC 机 方设置。 2. 利用 STM32 小板实现:利用导线外接 GPIO 口模拟 2 个按键输入, 根据输入组合的四种情况,分别控制三色灯四种流水灯效果

    2024年02月03日
    浏览(48)
  • STM32 PWM模式与输出比较模式的区别。PWM占空比不生效,在STM32CubeMX中配置PWM的两种模式——蓝桥杯嵌入式

      🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届

    2023年04月15日
    浏览(67)
  • 《嵌入式系统开发实践》实验三 进程通信

    一、 实验目的 掌握无名管道与有名管道的进程通信; 掌握消息队列的读写操作; 掌握共享内存的通信机制。 二、 实验任务与要求 管道读写程序的编写与应用; 消息队列的发送和接收程序的编写和应用; 共享内存的创建、连接和分离编程和应用。 三、 实验工具和环境

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包