⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc._c

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 _C
字号:
/*****************************************************************
 *  文件名:      ADC.c
 *  版本号:      
 *  创作日期:    2005.7.7
 *  作者:        fengzm
 *  功能说明:    可采集7个AD通道的值,使用了RC滤波;
 *  其它说明:    使用AVR单片机Atmaga48, 晶振:8Mhz
                  调用ADC文件的时候只需要输入通道号即可,如ADC(7);
 *****************************************************************/
 

/*****************************************************************

 *   修改日期:   2005.7.8  
 *   修改人:	  wangzq
 *   修改原因:   优化代码
                  定时器0溢出触发A/D转换
                  修改g_AdcNum改变通道号,默认值0;
				  g_ValueAdc返回A/D转换后的滤波值;
				  g_AdcEnd 0xff表示当前返回值有效;
*******************************************************************/


//包含文件
#include "ADC.h"

// ADC initialize
// Conversion time: 13uS,CLOCK/8;
void adc_init(void)
{
    ADCSRA = 0x00;  //disable adc
    ADMUX  = 0x00;  //select adc input 0
    ACSR   = 0x80;  //not need the compare function
    ADCSRB = 0x04;  //定时器0溢出触发转换
}

#pragma interrupt_handler adc_isr:22
void adc_isr(void)
{
	dword j;
	
	j =ADCL;            	//Read 8 low bits first (impo
    j |=(int)ADCH << 8;  	//read 2 high bits and shift into topbyte
    
	j *= ADCK;               //RC filtering
	j += (10-ADCK) * g_ValueAdc;
	j /=10;
	g_ValueAdc = j;
	
	g_AdcEnd  = 0xff;            	//set the flag of end
    ADMUX  = g_AdcNum;				//通道选择
}

//************************************************
//踏板信号转换为对应的控制值
//前踩:200-6000  对应10-300
//待机:高位 10
//后一:高位 11
//后二:高位 01
//************************************************
word AdcPedal(word adcp)
{
	byte i;
	dword get;
	
	i = 0;
		
	if (adcp <= PEDAL_STOP)
	{
		i = 0x3;
		adcp = 0;
	}
	
	if ((adcp>PEDAL_STOP) && (adcp<PEDAL_STARTL))
	{
		i = 0x2;
		adcp = 0;
	}
	
	if (adcp >= PEDAL_STARTL)
	{
		if (adcp > PEDAL_STARTH)
		{
			adcp = PEDAL_STARTH;
		}
		get = adcp - PEDAL_STARTL;
		get *= 5800;								//(6000-200)/20;
		get /= (PEDAL_STARTH - PEDAL_STARTL);
		get += 200;									//200/20;
		adcp = get;
	}
	
	if (i == 3)				//后一状态
	{
	adcp |= 0xC000;
	}
	if (i == 2)				//待机状态
	{
	adcp |= 0x8000;
	}
	
	return adcp;				//返回脚踏板转速值
}

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -