stm32 6 step pwm信号生成

发布者:konglingdeyuan最新更新时间:2022-04-21 来源: eefocus关键字:stm32  6  step  pwm  信号生成 手机看文章 扫描二维码
随时随地手机看文章

对于上升计数,Update刚刚发生时,CNT对于下降计数,Update刚刚发生时,CNT>CCRx

STM32 高级定时器 6-step PWM generation


6-step PWM generation

When complementary outputs are used on a channel, preload bits are available on the OCxM, CCxE and CCxNE bits. The preload bits are transferred to the shadow bits at the COM commutation event. Thus you can program in advance the configuration for the next step and change the configuration of all the channels at the same time. COM can be generated by software by setting the COM bit in the TIMx_EGR register or by hardware (on TRGI rising edge).
A flag is set when the COM event occurs (COMIF bit in the TIMx_SR register), which can generate an interrupt (if the COMIE bit is set in the TIMx_DIER register) or a DMA request(if the COMDE bit is set in the TIMx_DIER register).

@file    TIM/6Steps/main.c

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
uint16_t CCR1_Val = 32767;
uint16_t CCR2_Val = 24575;
uint16_t CCR3_Val = 16383;
uint16_t CCR4_Val = 8191;

/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void SysTick_Configuration(void);
void NVIC_Configuration(void);

/* Private functions ---------------------------------------------------------*/

/**
* @brief   Main program
* @param None
* @retval None
*/
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */    
          
/* System Clocks Configuration */
RCC_Configuration();

/* NVIC Configuration */
NVIC_Configuration();

/* GPIO Configuration */
GPIO_Configuration();

/* SysTick Configuration */
SysTick_Configuration();

/*-----------------------------------------------------------------------------
The STM32F10x TIM1 peripheral offers the possibility to program in advance the
configuration for the next TIM1 outputs behaviour (step) and change the configuration of all the channels at the same time. This operation is possible when the COM (commutation) event is used.
The COM event can be generated by software by setting the COM bit in the TIM1_EGR register or by hardware (on TRC rising edge).
In this example, a software COM event is generated each 100 ms: using the Systick interrupt.
The TIM1 is configured in Timing Mode, each time a COM event occurs,
a new TIM1 configuration will be set in advance.
The following Table describes the TIM1 Channels states:
              -----------------------------------------------
             | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 |
   ----------------------------------------------------------
|Channel1 |   1   |   0   |   0   |   0   |   0   |   1   |
   ----------------------------------------------------------
|Channel1N |   0   |   0   |   1   |   1   |   0   |   0   |
   ----------------------------------------------------------
   |Channel2 |   0   |   0   |   0   |   1   |   1   |   0   |
   ----------------------------------------------------------
|Channel2N |   1   |   1   |   0   |   0   |   0   |   0   |
   ----------------------------------------------------------
   |Channel3 |   0   |   1   |   1   |   0   |   0   |   0   |
   ----------------------------------------------------------
|Channel3N |   0   |   0   |   0   |   0   |   1   |   1   |
   ----------------------------------------------------------
-----------------------------------------------------------------------------*/

/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//Specifies the period value to be loaded into the active
//Auto-Reload Register at the next update event.
TIM_TimeBaseStructure.TIM_Period = 4095;
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //Specifies the clock division.
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
//Specifies the pulse value to be loaded into the Capture Compare Register.
TIM_OCInitStructure.TIM_Pulse = 2047;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);

TIM_OCInitStructure.TIM_Pulse = 1023;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);

TIM_OCInitStructure.TIM_Pulse = 511;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);

/* Automatic Output enable, Break, dead time and lock configuration*/
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; //运行模式下“关闭状态”选择 (Off-state selection for Run mode)
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 1;
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;   //刹车输入极性 (Break polarity)
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//1:MOE(主输出使能)能被软件置’1’或在下一个更新事件被自动置’1’(如果刹车输入无效)。

TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

TIM_CCPreloadControl(TIM1, ENABLE);

TIM_ITConfig(TIM1, TIM_IT_COM, ENABLE);

/* TIM1 counter enable */
TIM_Cmd(TIM1, ENABLE);

/* Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);

while (1)
{}
}

@file    TIM/6Steps/stm32f10x_it.c

/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
/* Generate TIM1 COM event by software */
TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
}

/******************************************************************************/
/*            STM32F10x Peripherals Interrupt Handlers                        */
/******************************************************************************/

/**
* @brief This function handles TIM1 Trigger and commutation interrupts
*   requests.
* @param None
* @retval None
*/
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
void TIM1_TRG_COM_TIM17_IRQHandler(void)
#else
void TIM1_TRG_COM_IRQHandler(void)
#endif
{
   /* Clear TIM1 COM pending bit */
   TIM_ClearITPendingBit(TIM1, TIM_IT_COM);

if (step == 1)
{
    /* Next step: Step 2 Configuration ---------------------------- */
    /* Channel3 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /* Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

    /* Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1 );
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
    step++;
}
else if (step == 2)
{
    /* Next step: Step 3 Configuration ---------------------------- */
    /* Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
   
    /* Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
     TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /* Channel1 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
    step++;
}
else if (step == 3)
{
    /* Next step: Step 4 Configuration ---------------------------- */
    /* Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /* Channel2 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);

    /* Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
    step++;
}
else if (step == 4)
{
    /* Next step: Step 5 Configuration ---------------------------- */
    /* Channel3 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /* Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);

    /* Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step++;
}
else if (step == 5)
{
   /* Next step: Step 6 Configuration ---------------------------- */
    /* Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);

   /* Channel1 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

    /* Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step++;
}
else
{
    /* Next step: Step 1 Configuration ---------------------------- */
    /* Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);

    /* Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);

    /* Channel2 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step = 1;
}
}

stm32对于三相电机控制的特点

电机控制
STM32增强型系列内嵌非常适合三相无刷电机控制的定时器和ADC,其高级PWM定时器提供:
■   6路PWM输出;
■   死区产生;
■   边沿对齐和中心对齐波形;
■   紧急故障停机,可与2路ADC同步及与其它定时器同步;
■   可编程的防范机制可以用于防止对寄存器的非法写入;
■   编码器输入接口;
■ 霍尔传感器接口;
■ 完整的矢量控制环:无传感器模式下为21us
双ADC结构允许双通道采样/保持,以实现12位精度、1 ms的转化。此双ADC结构为2个工作在非连续模式的独立的时序控制,具有多个触发源,并且每个通道的采样时间可编程。以上专门的外围电路与高性能 Cotex-M3内核的结合,可使完整的矢量控制环软件执行时间缩短为21 ms(无传感器模式、3相PMSM马达)。当电流采样频率为10 kHz时,CPU的工作负载低于25%,STM32可以执行应用中电机控制之外的其它任务。

[1] [1]
关键字:stm32  6  step  pwm  信号生成 引用地址:stm32 6 step pwm信号生成

上一篇:STM32 TImer几种模式
下一篇:STM32定时器的预装寄存器及影子寄存器PSC—ARR-CCRx

推荐阅读最新更新时间:2024-11-17 00:49

【驱动方案】基于STM32的300W无刷直流电机驱动方案
近些年,由于无刷直流电机大规模的研发和技术的逐渐成熟,已逐步成为工业用电机的发展主流。围绕降低生产成本和提高运行效率,各大厂商也提供不同型号的电机以满足不同驱动系统的需求。现阶段已经在纺织、冶金、印刷、自动化生产流水线、数控机床等工业生产方面应用。 无刷直流电机的优点与局限性 优点:高输出功率、小尺寸和重量、散热性好、效率高、运行速度范围宽、低电噪声、高可靠性和低维护要求、高动态响应、电磁干扰少。 局限性:无刷电机控制器昂贵、需要复杂的驱动电路、需要额外的位置传感器(FOC不用)。 无刷直流电机的驱动方法 无刷直机电机的驱动方式按不同类别可分多种驱动方式。 按驱动波形:方波驱动,这种驱动方式实现方便,易于实现电机无位
[单片机]
【驱动方案】基于<font color='red'>STM32</font>的300W无刷直流电机驱动方案
STM32与上位机串口通讯的学习笔记(简明的数据帧设计方法)
最近因为项目需要,需要做一个STM32和Windows的串口通讯协议来交换数据,本着追求极致的心态,来讨论一下简明的数据帧的设计方法。 ##数据的传输方式 对于很多单片机初学者而言,可能他们接触到串口 首先想到的就是通过串口打印字符串,然后就会很理所当然的想到了用“打印”的方式来传输数据。 比如我们需要传输一个float型的数据value,可能小白们首先会想到的方式就是串口重定向printf然后像下面这样把数据传输过去 printf( %f ,&value); 但是实际上,对于程序之间的交流,使用字符串打印这样的方式是非常浪费传输数据的,因为假设这个浮点数据为1234.567占了8个字符(小数点也占一位) 所以用字
[单片机]
STM32开发笔记89: SX1268驱动程序设计(电源控制)
单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍电源控制的相关驱动程序。 一、使用DC-DC或者LDO Two forms of voltage regulation (DC-DC buck converter or linear LDO regulator) are available depending upon the design priorities of the application. The linear LDO regulator is always present in all modes but the transceiver will use
[单片机]
<font color='red'>STM32</font>开发笔记89: SX1268驱动程序设计(电源控制)
PWM技术实现方法综述
摘要:总结了PWM技术问世至今各种主要的实现方法,叙述了它们的基本工作原理,并分析了它们各自的优缺点。 关键词:PWM;空间矢量;直接转矩控制;非线性 引言 采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。 PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80
[应用]
STM32学习堆和栈(三)
可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但
[单片机]
<font color='red'>STM32</font>学习堆和栈(三)
基于频率跟踪型PWM控制的臭氧发生器电源的研究
摘要:介质阻挡放电型臭氧发生器电源负载呈容性,随负载外加电压的升高,间隙放电逐渐增强,其总的负载等效电容逐渐变大。针对负载的这一特点,提出了一种对负载谐振型高频逆变电源输出电流进行闭环频率跟踪的PWM控制策略。这种策略逻辑明确,控制性能优越,实现简单、可靠。针对在实现过程中的关键问题,提出新的解决方法。所有的分析都得到实验验证。 关键词:容性负载;频率跟踪;PWM控制 1 概述 臭氧的强氧化能力和杀菌能力使其在水处理、化学氧化、食品加工和医疗卫生等许多领域具有广泛的应用 。臭氧发生器的物理结构和等效电路如图1所示。当臭氧发生器负载两端的外加电压低于气体放电起始电压Vs时,放电通道不发生放电现象,此时臭氧发生器可以等效为放电
[应用]
Stm32产生两路相位差为180度的pwm
由于上次用高级定时器产生的两路互补带死区的pwm信号不能满足应用需求。如标题所示需要的是两路相位差为180度的pwm信号,占空比和频率都是相同的,只是相位不同。仔细重读高级定时器的数据手册,发现产生的两路互补信号达不到这个要求。然后必然要考虑用两个通道产生了(两路互补属于一个通道)。仔细搜罗最终确定了两种发案可以实现,这两种方式具有异曲同工之妙但也有各自的不同。相同之处在于同采用定时器计数的中央对齐模式,不同就在于输出选择的模式不同(对TIM_CCMRX寄存器中OCXM位进行配置)。 下面待我一一详解。生成的波形图如下: 方案一:定时器计数采用中央对齐模式,两路输出配置为 pwm 的输出比较模式。 1)配置定时器的计数器为中间
[单片机]
<font color='red'>Stm32</font>产生两路相位差为180度的<font color='red'>pwm</font>
基于STM32的便携式人机界面系统
在全站仪应用于飞机的测量过程中,常会涉及到计算,以满足不同的应用环境与测量要求,以往的方式是测量后期编辑软件在计算机上实现,现代测量迫切需要一种便携式手持计算系统,来完成实时的测量要求,而这一系统中中文人机界面成为一种事实上的行业标准。实现显示汉字的TFT液晶和可输入数字的小键盘已成为智能设备必不可少的组成部分。同时作为便携式设备基本要求的低功耗特性也贯穿于中文人机界面的设计始终。这种低功耗中文人机交互界面需要在选取处理器和具体元器件上有特殊考虑。微功耗、高性能应作为选择相关器件的首要要求。本文选用了意法半导体公司基于ARM最新Cortex—M3内核的STM32F103RB作为主控芯片,通过选择合适的液晶模块,构建了一个高性能低
[单片机]
基于<font color='red'>STM32</font>的便携式人机界面系统

推荐帖子

神舟IV LCD显示SD卡图片 (简易电子相架功能)
目的:在LCD上显示图片方案:由于STM32F107VC内置内存只有64K,不足以全屏显示板载LCD,SSD1289,320x240x16bit图像数据只能通过外部存储设备读入,板置W25X16,或SD。数据需要提前导入。另一个方案是通过数据连接在运行时实时传输,USART,LAN,或USB。需要数据服务端程序。通过SD传输是开发量最少且可以独立运行的方案研究:板载有2个SD卡槽,主板卡槽和LCD板背部槽。由于主板卡槽使用的CS线与LC
btvnlue stm32/stm8
blackfin706 学习步骤
blackfin706学习步骤blackfin706学习步骤:):)
wangjinquan ADI参考电路
有哪位仁兄开发过笔记本快捷键驱动
能否把原理说一下,另外快捷键调节亮度跟显卡驱动还有BIOS有关系是么?有哪位仁兄开发过笔记本快捷键驱动不同的方案解决方法不一样。一般情况下,笔记本快捷键是HID类设备,支持HID规范,加载HIDClass驱动。设备管理器里面很多的HIDCompliantDevice属于这类设备。亮度调节的实现方式跟显卡设计相关。一般来说,显卡驱动会提供一个调节亮度的接口,监控程序接收到对应按键信息之后,调用该接口来控制显示器亮度。BIOS控制亮度不太了解,BIOS的控制比较底层,有可能BIOS直接
yingzi9 嵌入式系统
【Linux学习笔记5】shell脚本学习笔记
【Linux学习笔记5】shell脚本学习1.基础概念Shell概念:shell既是一种命令语言又是一种程序设计语言,它本身是一个用C语言编写的程序,作为用户使用Linux的桥梁Shell了解:系统给出shell提示符,对普通用户用$作提示符,对root用户用#做提示符,在提示符后输入命令名称及所需要的参数,shell将执行这些命令。2.shell脚本有什么用?《鸟哥私房菜》汇整一些在c
常见泽1 Linux与安卓
半天时间搞懂模拟电路
模拟电路精简教程。四十余页包含了模拟电路几乎所有重要知识点,讲解精细,透彻。不敢私藏,传上来与众共享。半天时间搞懂模拟电路多谢楼主分享,呵呵!回复模拟电路基础知识,还不错谢谢楼主了!谢谢楼主了!楼主辛苦了:rose:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy半天时间搞懂模电!!!!????太夸张吧,需要合理引导初学者啊,呵呵,我看没有大半辈子,模电哪里能谈的上“搞懂”。说得好,“三年磨数电,十年磨模电”。这资料是些基础的东西,简单易懂回复9
linda_xia 模拟电子
2007年全国大学生电子设计竞赛基本仪器和主要元器
本帖最后由paulhyde于2014-9-1509:47编辑1、基本仪器清单20MHz普通示波器(双通道,外触发输入,有X轴输入,可选带Z轴输入)60MHz双通道数字示波器低频信号发生器(1Hz~1MHz)高频信号发生器(1MHz~40MHz)函数发生器低频毫伏表高频毫伏表普通频率计失真度测试仪直流稳压电源秒表2米卷尺游标高度尺单片机开发系统及EDA开发系统单相自耦调压器(>200W)五位半数字万用表(电压表)四位半数字万用表2、主要元器件清单
呱呱 电子竞赛
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved