实现功能:
下面是原理图和程序
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "includes.h"
#include "lcd.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define HALL_GPIO GPIOA
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO 2
//设置任务堆栈大小
#define LED0_STK_SIZE 64
//任务堆栈
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);
//Speed_ADC 任务
//设置任务优先级
#define SPEED_ADC_TASK_PRIO 1
//设置任务堆栈大小
#define SPEED_ADC_STK_SIZE 64
//任务堆栈
OS_STK SPEED_ADC_TASK_STK[SPEED_ADC_STK_SIZE];
//任务函数
void speed_adc_task(void *pdata);
1、通过热释红外传感器检测是否有人,如果有人靠近门时,液晶屏提示亮并显示欢迎词:Welcome to home!,夜间探测到有人时开灯,灯用9个高亮LED灯设计,无人时,关灯。
2、主人可设定门禁系统工作状态,家里有人和无人两种状态。通过一个拨动开关设置,拨上去,液晶显示有人:Somebody!,拨下来液晶显示没人:Nobody!有人时,客人按下门铃,蜂鸣器鸣叫提示,无人时,客人按下门铃,无任何反应。
3、门外人员逗留时间超过一定时间则发出报警信息。
4、检测到有人或者没有人,有状态指示灯指示。
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "led.h"
#include "lcd1602.h"
u8 lighFlag=0; //光照 标志
u8 doorFlag=0; //门检测 标志
u8 manFlag=0; //人检测 标志
u8 menlingFlag=0; //门铃检测 标志
u8 baojFlag=0; //报警 标志
int main(void)
{
u32 time10ms=0;
delay_init(); //延时函数初始化
KEY_Init(); //初始化 按键
LED_Init(); //初始化电机引脚 作为输出 类似led
delay_ms(1);
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
delay_ms(20);
Lcd_Puts(0,0,"Waitting for you"); //初始化显示
Lcd_Puts(0,1,"Nobody! ");
#include "stm32f10x.h"
#include "bsp_SysTick.h"
uint8_t table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|\
GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|\
GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
SysTick_Init();
while(1)
{
uint8_t i;
for(i=0;i<10;i++)
{
GPIO_Write(GPIOB, ~table[i]);
Delay_ms(200);
if( i>= 5 )
{
实现的功能如下,下图是仿真原理图:
通过ARM内部的ADC采集光敏电阻电压,判断电压值
电压值低于设定的值,表示光强太弱,开路灯
光强合适,显示OK灯不亮
stm32内部ADC采集电压
光敏电阻,调节光强
#include "stm32f10x.h"
#include "bsp-lcd1602.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"
int main(void)
{
int ADC_num;
float temp;
ADC1_GPIO_Config();
ADC_Config();
delay_init(); //延时函数初始化
LCD1602_Init();
LCD1602_ShowStr(0,0,"Intelligent LED",15);
LCD1602_ShowStr(0,1," LED:",8);
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
while(1)
{
ADC_num=ADC_GetConversionValue(ADC1);
temp=ADC_num*(3.4/4096)*10;
//表示光线太弱
if( temp < 8 )
{
LCD1602_ShowStr(8,1,"Low ",4);
GPIO_ResetBits( GPIOC,GPIO_Pin_0 );
开关电源是用通过电路控制开关管进行高速的道通与截止,将直流电转化为高频率的交流电提供给变压器进行变压,从而产生所需要的一组或多组电压。开关稳压电源(以下简称开关电源)问世后,在很多领域逐步取代了线性稳压电源和晶闸管相控电源。早期出现的是串联型开关电源,其主电路拓扑与线性电源相仿,但功率晶体管工作于开关状态。随着脉宽调制(PWM)技术的发展,PWM开关电源问世,它的特点是用20kHz的载波进行脉冲宽度调制,电源的效率可达65%~70%,而线性电源的效率只有30%~40%。因此,用工作频率为20 kHz的PWM开关电源替代线性电源,可大幅度节约能源。
工程实际中,应用最为广泛调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制主要技术之一。
#include "Include.h"
float idata P_DATA=30;
float idata I_DATA=2;
float idata D_DATA=1;
//声明 PID 实体
//*****************************************************
static PID idata sPID;
static PID idata *sptr = &sPID;
//*****************************************************
//PID 参数初始化
//*****************************************************
void IncPIDInit(void)
{
sptr ->LastError = 0; //Error[-1]
sptr ->PrevError = 0; //Error[-2]
sptr ->Proportion = P_DATA; //比例常数 Proportional Const
sptr ->Integral = I_DATA; //积分常数 Integral Const
sptr ->Derivative = D_DATA; //微分常数 Derivative Const
//sptr ->SetPoint =10; //目标是 100
}
//*****************************************************
//增量式 PID 控制设计
//*****************************************************
float IncPIDCalc(float NextPoint,float SetPoint )
{
float iError, iIncpid; //当前误差
iError = SetPoint - NextPoint; //增量计算
iIncpid = sptr ->Proportion * iError //E[k]项
文章转自电设屋,资料百度网盘下载地址 https://www.aiesst.cn/share.html
目录
1605基于STM32无刷电机BLDC速度控制器系统设计-毕设课设资料
1606基于STM32热释人体感应智能门禁报警系统设计-毕业设计资料
1607基于STM32居家加湿器控制仿真系统设计-电子设计资料
1604基于STM32智能路灯灯光自动控制系统设计-毕设课设资料
1602基于单片机PID控制算法开关电源设计实现(完善)